gpt4 book ai didi

matlab - 在 matlab 中,如何以非迭代方式根据指定的 bins/subscripts 对矩阵的行求和?

转载 作者:太空宇宙 更新时间:2023-11-03 19:58:20 26 4
gpt4 key购买 nike

这个问题概括了前一个 Any way for matlab to sum an array according to specified bins NOT by for iteration? Best if there is buildin function for this 。我不确定,但我试过了,上一篇文章中的答案似乎不适用于矩阵。

例如,如果

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”有两个输出,一个是 bins,另一个是累积的行向量。它是根据A中的下标在B中添加行。例如,对于2,总和为[3,1] + [0,2] + [2,4] = [5,6],对于1它是[ 1,1] + [2,0] = [3,1]。

[bins, sums] = 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。再次感谢!

最佳答案

一种方法是使用矩阵乘法:

bins = unique(A);
sums = (A==bins.')*B;

以上是内存消耗大的,因为它构建了一个中间逻辑矩阵,大小为M×N,其中M 是 bin 的数量,NA 的长度。或者,您可以将该矩阵构建为稀疏逻辑以节省内存:

[bins, ~, labels] = unique(A);
sums = sparse(labels, 1:numel(A), true)*B;

关于matlab - 在 matlab 中,如何以非迭代方式根据指定的 bins/subscripts 对矩阵的行求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com