2014-02-15 180 views
1

我有这个巨大的稀疏矩阵的大小700万由1000。我想计算每列的标准偏差。如果我按照std(data(:,i)这样的列逐列执行,并在每列上循环,那很好。在matlab中计算标准差的问题

但是,如果我尝试立即执行它std(data),它会冻结和崩溃。

什么是最有效的方法呢?

+0

在两者之间做一些事情:将矩阵分成垂直块,其宽度与计算机支持的宽度相同。对于每个块调用'std',并在块上循环。因此,您不必循环太多次 –

+0

'意味着(数据)'也冻结? –

回答

0

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

正如Luis Mendo在评论中建议的那样,解决方案是在两者之间做一些事情。也就是说,您将矩阵分成更大的块,然后将这些块解析为函数。例如

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