Matlab具有条件的多个矩阵

时间:2012-10-13 10:04:51

标签: matlab matrix

我知道我可以传递矩阵的所有元素并执行此操作。

但也许还有其他选择。

我想这样做:

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]

asume 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]

2 个答案:

答案 0 :(得分:5)

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

mat2 * mat1

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

mat3 = mat2 * mat1

使用

idx = (mat3 < 0 | mat3 > 255)

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

的值
mat3(idx) = mat1(idx)

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

答案 1 :(得分:2)

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

  1. 您已计算产品矩阵中的每个单元格以了解是否要保留
  2. Matlab非常快速地预先形成矩阵乘法
  3. 所以我只想去:

    prod = mat1 * mat2
    mask = (prod < 0) | (prod > 255)
    prod(mask) = mat1(mask)