在 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
false
, false - 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
目前我是这样实现的:
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
false
, false - 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