【发布时间】:2015-10-01 05:40:15
【问题描述】:
我正在处理非常大的数据集(数十万列,14 行),我需要将每个子矩阵 n 列长为新矩阵中的一列,即
1 3 5 7
2 4 6 8
变成
1 3 5
2 4 6
3 5 7
4 6 8
当 n = 2 时。
我现在拥有的是
n_data_points = size(data1, 1);
small_n = 60;
big_n = size(data1, 2);
new_2 = bsxfun(@(x,y)(data1(x + n_data_points * (y - 1))), (1:(n_data_points * small_n)).', 1:(big_n - small_n + 1));
但是这种方法比较慢。如何使用本机 Matlab 操作做到这一点?
编辑
因此,在对这里的一些方法进行基准测试并进行更多研究之后,我确定了以下内容:
n = 60;
[m, big_n] = size(data1);
a = zeros((m*n), (big_n - n + 1));
for i = 1:(big_n - n + 1)
a(:, i) = reshape(data1(:, i:(i + n - 1)), 1, m*n);
end
这个方法用 14 x 387160 矩阵大约需要 2.3 秒,而我的原始方法大约需要 4.8,@Divakar 需要大约 3.9。
【问题讨论】:
-
无耻插件:这种操作在
R语言中更容易、更快。如果您要经常处理大数据,您可能需要考虑切换语言。 -
哦,相信我,我很乐意。我是一名从事研究的本科生,这不取决于我:P
标签: performance matlab matrix