matlab - 将 Matlab 中由相同整数索引的矩阵的列求和
问题描述
我A
在 Matlab 中有一个矩阵。我希望您能帮助我找到一个
A
算法对由相同整数索引的列求和。算法删除
A
由相同整数索引的列,而不是一列零。
我考虑将我的两个问题合并为一个,因为我相信一旦我们学会了如何选择正确的列,这两种算法的解决方案应该是相似的A
。
让我用一个例子更好地解释一下。
clear
b=8;
g=3;
B=[1;2;2;2;3;4;4;5]; %bx1
bnew=size(unique(B),1);
A=[1 2 3 4 5 6 7 8;
9 10 11 12 13 14 15 16;
17 18 19 20 21 22 23 24]; %gxb
关于第一种算法:矩阵B
告诉我们应该将哪些列A
相互求和。例如:第二个、第三个、第四个元素B
相等;这意味着应该将 的第二、第三和第四列A
相加。
关于第二种算法:矩阵告诉我们应该删除B
哪些列并用一列零替换。A
例如:第二个、第三个、第四个元素B
相等;这意味着A
应该删除第二、第三和第四列,并添加一列零。
重要的是要注意要汇总或删除的列总是相邻的。换句话说,我们不能有例如
B=[1;2;2;2;3;2;4;5];
这些是我想获得的矩阵,但我找不到如何获得。
Matrixdesired1=[1 2+3+4 5 6+7 8;
9 10+11+12 13 14+15 16;
17 18+19+20 21 22+23 24]; %gxbnew
Matrixdesired2=[1 0 5 0 8;
9 0 13 0 16;
17 0 21 0 24]; %gxbnew
解决方案
使用矩阵乘法的解决方案:
C = B == 1:B(end);
Matrixdesired1 = A * C;
Matrixdesired2 = Matrixdesired1;
Matrixdesired2(:, sum(C) > 1) = 0;
或者
Matrixdesired2 = Matrixdesired1 .* (sum(C) <= 1);
这C
是一个[b * bnew]
二进制矩阵。如果它消耗大量内存,您可以创建一个稀疏矩阵并检查其效率:
C=sparse(1:numel(B),B,1);
推荐阅读
- php - Laravel - 缺少路由所需的参数
- javascript - ThreeJS:将边缘几何应用于 ArrowHelper
- python - 使用 image_dataset_from_directory 加载灰度 png 返回一个 3 通道张量
- openj9 - 不同应用程序之间的 OpenJ9 类共享
- html - 在 HTML 表格中添加图标
- html - 显示以前查看过的页面中的特定 DIV
- c# - 有没有办法在缓存过期之前通知 Web 应用程序有关密钥保管库机密的更新
- asp.net-mvc - 无法将“System.Collections.Generic.List`1 Models.Hospitals]”类型的对象转换为“System.Collections.Generic.IEnumerable”类型
- matlab - 为什么我们需要对凸多边形进行三角剖分以便从中均匀采样?
- php - chrome 不使用 apache 服务器显示 php 文件