Matlab中如何使用sum()函数对find()提取的矩阵位置对应元素求和
首先修正你代码里的小问题:你定义的矩阵变量名是Matrix,后续find调用里用的变量是M,运行会报错,建议先统一变量名,比如将矩阵赋值改为M = [1 2 3 4 5 6; 6 5 4 3 2 1];
下面分两种求和需求给实现方法:
1. 对满足条件的矩阵元素求和
- 方法1:直接用逻辑索引(不需要提前调用
find,写法更简洁高效)
直接对逻辑判断结果做索引再求和即可,示例代码:
以小于4的元素为例,对应元素为1、2、3、3、2、1,求和结果为12,和实际计算一致。% 求所有小于4的元素的和 sum_less4 = sum(M(M<4)); % 求所有大于4的元素的和 sum_greater4 = sum(M(M>4)); - 方法2:基于已经拿到的行列索引
f0、c0计算
用sub2ind函数把行列下标转换成Matlab的线性索引,再取值求和即可,示例代码:% 先转线性索引再求和 sum_less4 = sum(M(sub2ind(size(M), f0, c0))); sum_greater4 = sum(M(sub2ind(size(M), f1, c1)));
2. 对满足条件的索引值求和
如果需要对提取到的索引本身求和,直接对find返回的结果调用sum即可:
- 对行索引求和:
sum(f0)(小于4的元素的行索引总和)、sum(f1)(大于4的元素的行索引总和) - 对列索引求和:
sum(c0)(小于4的元素的列索引总和)、sum(c1)(大于4的元素的列索引总和) - 对线性索引求和:
sum(sub2ind(size(M), f0, c0))
内容的提问来源于stack exchange,提问作者user3527033
相关产品推荐
相关产品推荐

