我有一个巨大的csv文件,类似于:
0, "24 44 43 51......"
1, "99 81 34 58......"
点表示每行中的更多数字。每行都有一个序列号,例如。 0,1,2 ......和相应的数字(约1000)。我在这个文件中有超过1000行。有没有办法在矩阵中读取此文件,该矩阵由行和列组成,如:
0 24 44 43 51......(more data)
1 99 81 34 58......(more data)
.
.
.
我已经尝试了tdfread
但放弃了,因为阅读时间太长。任何帮助将不胜感激。
答案 0 :(得分:2)
以下是我在这种情况下推荐的一般方法:
textscan
)。regexprep
)str2num
以提取数值:以下是示例代码:
fid = fopen(filename, 'r');
C = textscan(fid, '%s', 'Delimiter', '');
C = cellfun(@str2num, regexprep(C{:}, '[",]', ' '), 'UniformOutput', false);
fclose(fid);
结果是数字向量的单元阵列,每行一个向量。如果所有向量具有相同数量的元素,则可以将单元格数组转换为矩阵:
M = vertcat(C{:});
如果您事先知道每行的值数(让我们用N
表示),您可以使用更短的语法:
fid = fopen(filename, 'r');
C = textscan(fid, repmat('%f', 1, N), 'Delimiter', '", \b\t', 'MultipleDelimsAsOne', true);
fclose(fid);
M = [C{:}];
答案 1 :(得分:0)
这应该有效:
>> n = 2; % The number of lines; 1000 in your case.
>> A = textread('test1.txt','%d','delimiter',', "','emptyvalue',0);
>> B = reshape(A,uint64(numel(A)/n),n)';
>> B = B(:,[1, 3:end]);
test1.txt 中的输入为:
0, "24 44 43 51"
1, "99 81 34 58"
结果是:
>> B
B =
0 24 44 43 51
1 99 81 34 58