matlab中计算标准差的几个问题
我有一个巨大的稀疏矩阵,大小是700万乘1000。我想计算每列的标准偏差。如果我像stddata:,那样逐列执行,我会在每一列上循环,这很好 但如果我想马上做,stddata,它会冻结并崩溃matlab中计算标准差的几个问题,matlab,std,Matlab,Std,我有一个巨大的稀疏矩阵,大小是700万乘1000。我想计算每列的标准偏差。如果我像stddata:,那样逐列执行,我会在每一列上循环,这很好 但如果我想马上做,stddata,它会冻结并崩溃 最有效的方法是什么?最有效的方法是使用matlabs std函数,在我的简单测试中,sizeA=[1e3,1e3],大约快10倍。缺点是,正如您所注意到的,必须将整个矩阵解析为函数。这需要内存,而您可能没有 正如路易斯·门多(Luis Mendo)在评论中所建议的那样,解决办法是在两者之间做点什么。也就是说
最有效的方法是什么?最有效的方法是使用matlabs std函数,在我的简单测试中,sizeA=[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
在两者之间做些事情:将矩阵分成垂直的块,宽度与计算机支持的宽度相同。对于每个区块,调用std,并在区块上循环。这样,您就不必循环这么多次,这是否意味着数据也会冻结?