【发布时间】:2011-04-11 17:35:43
【问题描述】:
我想计算矩阵中可被 2 整除的元素的总和。我该怎么做?以及如何以坐标形式输出答案?
【问题讨论】:
标签: matlab matrix indexing sum
我想计算矩阵中可被 2 整除的元素的总和。我该怎么做?以及如何以坐标形式输出答案?
【问题讨论】:
标签: matlab matrix indexing sum
一些伪代码。几乎每一行的每一列都循环。
sum = 0
for(i = 0; i < matrix.num_rows; i++) {
for(j = 0; j < matrix.num_cols; j++) {
if(matrix[i][j] % 2 == 0)
sum += matrix[i][j]
}
}
不知道你所说的坐标形式是什么意思。
【讨论】:
sum(M(mod(M,2)==0))
这是矩阵M,只有偶数:
(mod(M,2) == 0).*M
您可以将其与sum(M) 或sum(sum(M)) 相加(不确定“坐标形式”是什么意思)。
【讨论】:
% 运算符。你想要MOD。 % 用于制作 cmets。
% 作为运算符的语言之后,很容易忘记这一点。
如果您有一个矩阵M,您可以使用MOD 函数找到偶数元素所在位置的logical index(即掩码),该函数无需循环即可对整个矩阵进行操作。对于矩阵中为偶数的元素,除以 2 后为 0:
index = (mod(M,2) == 0);
您可以使用函数FIND获取这些偶数条目的行和列索引:
[rowIndices,colIndices] = find(index);
您可以通过使用上面的逻辑掩码索引M 来获取偶数元素的总和,以提取偶数条目并使用SUM 函数将它们相加:
evenSum = sum(M(index));
这是一个使用函数MAGIC 创建的矩阵M 的示例:
>> M = magic(3)
M =
8 1 6
3 5 7
4 9 2
>> index = (mod(M,2) == 0)
index =
1 0 1 %# A matrix the same size as M with
0 0 0 %# 1 (i.e. "true") where entries of M are even
1 0 1 %# and 0 (i.e. "false") elsewhere
>> evenSum = sum(M(index))
evenSum =
20
【讨论】: