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 列的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB应用实战系列(五十一)-TXT数据的读取完美教程

dlmwrite / dlmread 的精度问题 [重复]

MATLAB Coder 语法错误和不支持的函数

matlab中plot()画图时如何指定X Y轴的范围

matlab里面mesh绘图,如何改变指定区域的颜色

matlab中位操作倒序函数bitrevorder怎么用?