2013-09-16 73 views
1

我想根據矩陣R中的值將矩陣M的元素求和到數組d中。根據另一個矩陣中的值將一個矩陣的元素求和到數組

從理論上講,它的不能序列,因爲求和成一個陣列(d)的動作需要存儲器訪問相同的數據。

我實現它以如下方式

for ind = 1: numel(R) 
    d(R(ind)) = d(R(ind)) + M(ind);  
end 

像@Andrew在該相關主題提示: How do I iterate through each element in an n-dimensional matrix in MATLAB?

陣列R和元素不是每個大,但也並非1或2 ,它可以是例如1至15

有沒有一種更有效的方式來做到這一點在Matlab,即使行動「理論複雜性」會更糟糕?

因爲它也可以通過遍歷R中的可能值並在R = val的索引中對M中的元素進行求和,或者在Matlab中更「內置」的元素來解決,這些元素不會「喜歡」循環一般來說。

在SQL比如你有一個「內置」的方法來瓦解一個列的重複和獲取值的總和其他列。

有一個關於類似的行動,但在不同的langauge話題: Collapse a matrix to sum values in one column by values in another

+0

請給出一些R和M以及期望輸出的最小例子。 –

回答

2

這是可能的,這可以使用Matlab的accumarray函數來完成。事情是這樣的:

d = accumarray(R, M, expected_size_of_d) 

但是,如果你給我們MR和預期d示例值將是有益的,因爲準確的解決方案可能取決於你的矩陣形狀,事實上,如果你使用的線性索引或不...

0

你的問題不是很清楚。如果要總結的M,其中選擇由R給選定的元素,你可以做如下:

dsum(M(sub2ind(size(M),R(:,1),R(:,2)))) 

例如,考慮

M = [1 2 3; 
    4 5 6; 
    7 8 9]; 

R = [1 1; 3 1; 2 2]; % each row selects an element of M 

結果給出M(1,1 )+ M(3,1)+ M(2,2):

>> sum(M(sub2ind(size(M),R(:,1),R(:,2)))) 
ans = 
    13 
相關問題