2014-02-15 182 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