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',並在塊上循環。因此,您不必循環太多次 –
'意味着(數據)'也凍結? –