我有一个巨大的稀疏矩阵,大小 700万×1000 。我想计算每列的标准偏差。如果我像std(data(:,i)
一样逐列地执行此操作并循环遍历每一列,那就没问题了。
但如果我尝试一次std(data)
,它会冻结并崩溃。
最有效的方法是什么?
答案 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