1
我有这个巨大的稀疏矩阵的大小700万由1000。我想计算每列的标准偏差。如果我按照std(data(:,i)
这样的列逐列执行,并在每列上循环,那很好。在matlab中计算标准差的问题
但是,如果我尝试立即执行它std(data)
,它会冻结和崩溃。
什么是最有效的方法呢?
我有这个巨大的稀疏矩阵的大小700万由1000。我想计算每列的标准偏差。如果我按照std(data(:,i)
这样的列逐列执行,并在每列上循环,那很好。在matlab中计算标准差的问题
但是,如果我尝试立即执行它std(data)
,它会冻结和崩溃。
什么是最有效的方法呢?
最有效的方法是使用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
在两者之间做一些事情:将矩阵分成垂直块,其宽度与计算机支持的宽度相同。对于每个块调用'std',并在块上循环。因此,您不必循环太多次 –
'意味着(数据)'也冻结? –