当前位置:  开发笔记 > 编程语言 > 正文

矩阵中四个组的总和

如何解决《矩阵中四个组的总和》经验,为你挑选了1个好方法。



1> rayryeng - R..:

假设第一列描述了第三列中哪些值属于哪个组,最简单的方法是将所有零值更改为NaN,然后用于accumarray对属于每个组的所有值求和.这是至关重要的,因为只要对矩阵/数组进行求和,任何值都是NaN,结果就是NaN.这很好,因为如果对每个组求和,如果组NaN中的至少一个值在更改之前等于0 ,则会得到结果.

我将假设您的矩阵存储方式X如下:

X = [1   1   2545
1   2   0
1   3   0
1   4   0
2   5   0
2   6   0
2   7   231
2   8   54587
3   9   41
3   10  1111
3   11  0
3   12  1213
4   13  0
4   14  0
4   15  0
4   16  0
5   17  898
5   18  6887
5   19  522
5   20  23 ];

制作第三列的副本,让我们做一些魔术:

col = X(:,3);
col(col == 0) = NaN;
out = accumarray(X(:,1), col);

我们得到:

out =

         NaN
         NaN
         NaN
         NaN
        8330

这种方法的好处在于,矩阵中每个值的组ID不必按照您在帖子中的顺序排列.


然而,如果你的矩阵保证具有其中每个组由元素连续4元组的顺序,你可以做的同样的事情NaN分配,但你可以尽量避免使用accumarrayreshape第三列的四个列的矩阵,然后sum在每个单独排:

col = X(:,3);
col(col == 0) = NaN;
out = sum(reshape(col, 4, []), 1);

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有