Matlab dlmread 函数:指定范围以仅考虑前 4 列
Posted
技术标签:
【中文标题】Matlab dlmread 函数:指定范围以仅考虑前 4 列【英文标题】:Matlab dlmread function: Specify range to consider first 4 columns only 【发布时间】:2014-04-30 12:38:15 【问题描述】:假设输入文件的格式如下:
1,2,3,4,One
5,6,7,8,Two
9,10,11,12,Three
...
41,42,43,44,Eleven
目的是使用 dlmread 函数将前 4 列作为矩阵读取。根据指南(即在下面找到 URL),我已经成功地做到了这一点:
A = dlmread('myfile.txt',',',range)
应该将 range 变量指定为什么,以便只考虑前 4 列?
[导游:http://www.mathworks.co.uk/help/matlab/ref/dlmread.html]
【问题讨论】:
dlmread 函数不能用于包含非数字字段的文件吗? [来源:mathworks.co.uk/matlabcentral/answers/… 【参考方案1】:你看过textscan
吗?似乎会更容易,因为使用 dlmread
会要求您在加载文件之前找到行数。文档中的示例之一是关于跳过列:
fileID = fopen('scan1.dat');
dates = textscan(fileID,'%s %*[^\n]');
fclose(fileID);
为了适应你的问题,你可以简单地这样做:
% //Open the file pointer
fileID = fopen('myfile.txt');
% //textscan uses a formatSpec (see link below)
% //so the above spec says to get a string and then
% //skip everything up to the newline character
% //So we can adapt this to yours like so:
A = textscan(fileID,'%d,%d,%d,%d, %*[^\n]');
% //Each %d is an integer number, separated by commas
% //and after the first four, ignore the rest of the line.
fclose(fileID);
formatSpec 帮助:http://www.mathworks.com/help/matlab/ref/textscan.html#inputarg_formatSpec
您可能还想查看'CollectOutput'
标志,因为它会将所有数据放入一个数组中。如果不设置此标志,您将获得一个 1x4 元胞数组,每个元素包含一列数据。设置标志后,A
将是一个单元素元胞数组,其中元素是一个 4xnrows
值数组。
这也解决了非数字字段的问题,因为 textscan 可以处理任何数据,并且会跳过那些符合格式规范的字段。
【讨论】:
【参考方案2】:最简单的方法是使用 readtable,它允许您导入不同的数据类型,然后您可以使用该表选择数字字段并使用 table2array 将它们转换为数组。
【讨论】:
请详细说明您的答案-评论以上是关于Matlab dlmread 函数:指定范围以仅考虑前 4 列的主要内容,如果未能解决你的问题,请参考以下文章