我正在读取csv或文本文件中的一些数据(由几千行组成,每行包含固定数量的列 - 例如:20)。
我在matlab中保留了上述细节,结构如下。
initial_var(firs).second_var(sec).third_var(thir).time(end+1, :) = [];
initial_var(firs).second_var(sec).third_var(thir).scan(end+1, :) = [];
initial_var(firs).second_var(sec).third_var(thir).time(end+1, :) = val1;
initial_var(firs).second_var(sec).third_var(thir).scan(end+1, :) = val2;
从csv / text文件中填写first
,sec
,thir
,val1
,val2
。
除了time
和scan
之外,还有多个字段可用,但我没有将它们包含在此处。
在运行程序时,我收到警告
变量
initial_var
似乎在每次循环迭代时都会改变大小。考虑预先分配速度。
我知道这可以通过预先分配和初始化来解决。
但我的问题是,保留上述数据而不是上述结构类型的更好方法是什么?
答案 0 :(得分:1)
这些行不会做任何事情:
initial_var(firs).second_var(sec).third_var(thir).time(end+1, :) = [];
initial_var(firs).second_var(sec).third_var(thir).scan(end+1, :) = [];
表示“删除此数组结束后的行”。
您可能希望查看多维结构:
vars(firs,sec,thr).time(end+1, :) = val1
vars(firs,sec,thr).scan(end+1, :) = val2
也应该更容易初始化。
此外,在加载数据时,您可能希望查看textscan
。
答案 1 :(得分:0)
通常,最快,最灵活的数据读取方式是使用fscanf
。 (另请参阅csvread
以获取csv文件的便利包装。)例如:
data = randn(1e4, 20);
save data.txt data -ASCII
tic
h = fopen('data.txt')
data_read = fscanf(h, '%f');
data_read = reshape(data_read, 1e4, []);
toc
Elapsed time is 0.089097 seconds.
如果数据都是数字,那么存储和操作简单矩阵的速度最快。
此外,如果您发布一些特定数据和可重现的代码,我们可能会提供更具体的答案......