在 Matlab 中有条件地替换矩阵中的变量

Conditional Replacement of Variables in a Matrix in Matlab

目前我是这样实现的:

b = a;
b(b > 0) = 1;
b(b < 0) = -1;

这可行,但对我来说似乎不够优雅。当然有更好的方法吗?一个班轮?

例如

b=sign(a);

这应该做同样的事情。

Ander 的回答是我愿意接受的答案。这是另一个作为心理练习的。您可以使用 logical 运算符实现相同的效果:

b = (a > 0) - (a < 0);

上述表达式的优雅之处在于,对于 a 除 0 以外的任何值,在任何给定时间只有等式的一部分是 "on"。如果 a 的任何值为正,则输出将为 logical true,因为等式左侧激活而右侧不激活。类似地,如果 a 的任何值为负,则等式右侧将激活并计算为 true,而左侧则不会。右侧分配了一个负号,因此合并为 -1。这与左侧的所有内容合并为一个 double 精度数组,从而完成我们的输出。当 a 的任何值等于 0 时,检查表达式给您的内容也是谨慎的。由于两个表达式都不会激活,因此这两个表达式的计算结果为 logical falsefalse - false 合并为 0,这是我们想要的结果。

例子

>> a = -2:0.5:2

a =

   -2.0000   -1.5000   -1.0000   -0.5000         0    0.5000    1.0000    1.5000    2.0000

>> b = (a > 0) - (a < 0)

b =

    -1    -1    -1    -1     0     1     1     1     1