在matlab中计算标准差的问题

时间:2014-02-15 16:14:17

标签: matlab std

我有一个巨大的稀疏矩阵,大小 700万×1000 。我想计算每列的标准偏差。如果我像std(data(:,i)一样逐列地执行此操作并循环遍历每一列,那就没问题了。

但如果我尝试一次std(data),它会冻结并崩溃。

最有效的方法是什么?

1 个答案:

答案 0 :(得分:0)

最有效的方法是使用matlabs" std"函数,在我的简单测试中(大小(A)= [1e3,1e3]),它快了大约10倍。缺点是,正如您所注意到的,必须将整个矩阵解析为函数。这需要记忆,你可能没有。

正如Luis Mendo在评论中建议的那样,解决方案是在两者之间做点什么。也就是说,您将矩阵划分为更大的块,然后将这些块解析为函数。 e.g。

A = randn(1e3);
chunkSize = 100;
res = zeros(1,1e3);
for i = 1:length(A)/chunkSize;
    res((i-1)*chunkSize+1:i*chunkSize) = std(A((i-1)*chunkSize+1:i*chunkSize));
end