Arrays 如何导入带有标记的数据-但不包括这些标记?
当我要导入一个数据矩阵时,在第一列的第一行中有一个标记,表示每次获取数据时,该标记都会干扰MATLAB导入数据的方式 有没有办法把它编码出来 例如: '>16.11-0.00161 1.612-0.00140 1.613-0.00145 1.614-0.00153 1.615-0.00120 16-0.00076Arrays 如何导入带有标记的数据-但不包括这些标记?,arrays,matlab,file-io,matrix,data-import,Arrays,Matlab,File Io,Matrix,Data Import,当我要导入一个数据矩阵时,在第一列的第一行中有一个标记,表示每次获取数据时,该标记都会干扰MATLAB导入数据的方式 有没有办法把它编码出来 例如: '>16.11-0.00161 1.612-0.00140 1.613-0.00145 1.614-0.00153 1.615-0.00120 16-0.00076 我不希望手动从数据中删除,因为可能会有数千个。如果您使用*nix系统或cygwin,那么如果您将此输出发送到命令sed,则可以删除这些。例如: user@host $ cat out.
我不希望手动从数据中删除
,因为可能会有数千个。如果您使用*nix系统或cygwin,那么如果您将此输出发送到命令sed
,则可以删除这些
。例如:
user@host $ cat out.txt
>0 5 3 4
0 6 4 3
>1 5 3 6
1 2 4 5
user@host $ cat out.txt |sed 's/>//g'
如果需要将此新输出存储到文件:
user@host$cat out.txt
0534
如果此输出来自当前目录下的某个程序:
user@host $ ./some_program |sed 's/>//g'
以下是MATLAB中的一个可能实现:
% read file lines as a cell array of strings
fid = fopen('file.dat', 'rt');
C = textscan(fid, '%s', 'Delimiter','');
C = C{1};
fclose(fid);
% find marker locations
markers = strncmp('>', C, 1);
% remove markers
C = regexprep(C, '^>', '');
% parse numbers into a numeric matrix
X = regexp(C, '\s+', 'split');
X = str2double(vertcat(X{:}));
结果是:
% the full matrix
>> X
X =
0 5 3 4
0 6 4 3
1 5 3 6
1 2 4 5
% only the marked rows
>> X(markers,:)
ans =
0 5 3 4
1 5 3 6
您从何处导入数据?我正在从一个txt文件导入数据,然后尝试对数据进行排序和平均。但是“>”现在是代码中的活扳手我在复制你的结果时遇到了麻烦,但我感觉这是我的问题。我确实发现使用手动导入选项时,数据将不带“>”导入,在导入过程中是否有一种简单的方法将其编程到matlab中,或者只有在手动导入时才有可能?如果矩阵中的数字为1 0.05 4 5 1 66 1.5 4等,vertcat将给我一个关于尺寸的错误do。有没有快速解决这个问题的方法?谢谢请在问题中发布此数据的示例(格式正确)。。前面显示的数据很好,我用一个更好的例子解决了这个问题。我道歉。我忘了matlab在文件开头的一句话有多敏感了?请再次检查格式,并将文本缩进4个空格以正确呈现。。。这类问题很难回答,除非你展示了数据的实际部分,而不是虚构的例子!不,单引号不是文件的一部分。我不能让>在没有它的情况下出现。我再次表示歉意。
% the full matrix
>> X
X =
0 5 3 4
0 6 4 3
1 5 3 6
1 2 4 5
% only the marked rows
>> X(markers,:)
ans =
0 5 3 4
1 5 3 6