1

我知道我可以传递矩阵的所有元素并做到这一点。

但也许还有另一种选择。

我想要做:

mat1 = mat2 * mat1;

mat1 中的每个元素变为负数或大于 255,我想保留前一个元素。

例如(结果不正确,这仅用于示例):

mat1 = [10  25  12
        33  7   163
        232 13  77]

mat2 = [-1  2  -3
         4 -5   6
         -7 -8  9]

假设 mat1 = mat2 * mat1 给出:

mat1 = [-77.32  59    298
        0       -33   12
        -600     256   80]

所以我想将 mat1 修复为:

mat1 = [10   59  12
        0    7   12
        232  13  80]
4

2 回答 2

5

如果我理解正确,你有一个矩阵乘法

mat2 * mat1

最好是将矩阵乘法结果存储在第三个矩阵中

mat3 = mat2 * mat1

idx = (mat3 < 0 | mat3 > 255)

你有一个矩阵,其中有你想要替换的地方,而没有的地方为零。应用此索引将 mat3 中的值替换为 mat1 的值

mat3(idx) = mat1(idx)

结果是一个矩阵,其中每个小于 0 或大于 255 的元素都被替换为 mat1 的值。

于 2012-10-13T10:27:29.170 回答
2

我认为将矩阵相乘然后“修复”结果是最好的选择。原因如下:

  1. 您已经计算了产品矩阵中的每个单元格,以了解是否要保留它
  2. Matlab 非常快地执行矩阵乘法

所以我会简单地选择:

prod = mat1 * mat2
mask = (prod < 0) | (prod > 255)
prod(mask) = mat1(mask)
于 2012-10-13T10:24:25.740 回答