這個問題概括了前一個Any way for matlab to sum an array according to specified bins NOT by for iteration? Best if there is buildin function for this。我不確定,但我嘗試過,以前的帖子中的答案似乎不適用於矩陣。在matlab中如何按照非迭代方式按照指定的bin/subscripts對矩陣的行進行求和?
例如,如果
A = [7,8,1,1,2,2,2]; % the bins or subscripts
B = [2,1; ...
1,1; ...
1,1; ...
2,0; ...
3,1; ...
0,2; ...
2,4]; % the matrix
然後將所需功能「binsum」具有兩個輸出,一個是二進制位,而另一個是累積的行向量。它根據A中的下標在B中添加行。例如,對於2,總和爲[3,1] + [0,2] + [2,4] = [5,6],對於1,它是[ 1,1] + [2,0] = [3,1]。
[bin,sum] = binsum(A,B);
bins = [1,2,7,8]
sums = [2,1;
1,1;
3,1;
5,6]
第一種方法accumarray說,它的「VAL」參數可以僅是一個標量或矢量。第二種方法spare似乎不接受矢量作爲每個元組(i,j)的值「v」。所以我必須再次發佈求助,並且仍然不希望使用迭代遍歷B的列來執行此操作。
我正在使用2017a。非常感謝!
@LuisMendo感謝。我正在使用2017a。 – Tony
如果沒有別的辦法,你可以遍歷'B'的列並使用前面的解決方案,例如'accumarray(A',B(:,1))''sum'的第一列。 – beaker
@LuisMendo非常感謝您的幫助。 B可能是數千列。 – Tony