我有2個矢量A和B,每個長度爲10,000。對於ind=1:10000
中的每一個,我想要計算A(1:ind)
和B(1:ind)
的Pearson相關性。當我在for循環中執行此操作時,需要太多時間。在我的機器中,parfor不能與超過2名工人一起工作。有沒有辦法快速執行此操作並將結果保存在向量C中(顯然其長度爲10,000,第一個元素爲NaN)?我發現Fast rolling correlation in Matlab這個問題,但這與我所需要的有點不同。MATLAB:2個矢量中所有指數的快速相關計算
3
A
回答
2
您可以使用此方法來計算累積的相關係數:
function result = cumcor(x,y)
n = reshape(1:numel(x),size(x));
sumx = cumsum(x);
sumy = cumsum(y);
sumx2 = cumsum(x.^2);
sumy2 = cumsum(y.^2);
sumxy = cumsum(x.*y);
result = (n.*sumxy-sumx.*sumy)./(sqrt((sumx.^2-n.*sumx2).*(sumy.^2-n.*sumy2)));
end
1
解
我建議如下方法:
Pearson相關可通過使用the following formula計算:
計算每個隨機variabiles的累計平均(X,Y,XY,X^2,Y^2)有效。在給定的2計算的累積平均
,我們可以計算X和Y
- 累計STD給定的X,Y和累計平均累計STD以上,我們可以計算出累計皮爾森係數。
代碼
%defines inputs
N = 10000;
X = rand(N,1);
Y = rand(N,1);
%calculates accumolative mean for X, Y, X^2, Y^2, XY
EX = accumMean(X);
EY = accumMean(Y);
EX2 = accumMean(X.^2);
EY2 = accumMean(Y.^2);
EXY = accumMean(X.*Y);
%calculates accumolative pearson correlation
accumPearson = zeros(N,1);
for ii=2:N
stdX = (EX2(ii)-EX(ii)^2).^0.5;
stdY = (EY2(ii)-EY(ii)^2).^0.5;
accumPearson(ii) = (EXY(ii)-EX(ii)*EY(ii))/(stdX*stdY);
end
%accumulative mean function, to be defined in an additional m file.
function [ accumMean ] = accumMean(vec)
accumMean = zeros(size(vec));
accumMean(1) = vec(1);
for ii=2:length(vec)
accumMean(ii) = (accumMean(ii-1)*(ii-1) +vec(ii))/ii;
end
end
運行時
爲N = 10000:
Elapsed time is 0.002096 seconds.
對於N = 1000000:
Elapsed time is 0.240669 seconds.
正確性
測試上面的代碼可以通過計算的累計皮爾森係數由CORR函數來完成的正確性,並將其與從上面的代碼中給出的結果:
%ground truth for correctness comparison
gt = zeros(N,1)
for z=1:N
gt(z) = corr(X(1:z),Y(1:z));
end
不幸的是,我沒有統計和機器學習工具箱,所以我不能做這個檢查。 我認爲這是一個良好的開端,雖然,您可以繼續從這裏:)
相關問題
- 1. Matlab中三點相關函數的矢量化計算?
- 2. 快速計算解計算匹配的矢量值
- 3. 用Matlab計算兩個指數之間的所有數字
- 4. 如何在C++中快速計算矢量的歸一化l1和l2範數?
- 5. 快速計算兩個數組之間的相等字節數
- 6. MATLAB快速查找矩陣中的矢量
- 7. 在python中加速numpy/scipy中的矢量化相關函數?
- 8. 用於計算數組中所有元素的順序的快速算法?
- 9. 與矢量相關的空指針
- 10. 加速大量數組相關的計算,visual studio
- 11. 快速矢量索引
- 12. R:計算兩個矢量
- 13. 計算數據幀矢量
- 14. 是否有一個實現快速最大等級相關估計量的庫?
- 15. 在R中的關係數據框中矢量化計算
- 16. 計算中間矢量角
- 17. 所有變量對上的快速交叉表和統計量
- 18. 計算散列的速度有多快?
- 19. HBase的快速計算行
- 20. 快速矢量差異/相似性度量
- 21. 計算矢量的所有元素的累積百分比
- 22. 如何加速Matlab嵌套for循環,當我無法矢量化計算?
- 23. numpy的計算矢量
- 24. 相關類型:矢量矢量
- 25. 在Matlab中快速的方法來計算大矩陣的倒數10800x10800?
- 26. 最快的算法來計算數量
- 27. Matlab位置列表到速度矢量
- 28. MATLAB:使用矢量化加速fminbnd
- 29. 快速計算節點關係數的方法
- 30. Matlab的:由一個矢量