我在matlab中有两个数组
a = [1 1.1 1.2 1.1 1.3]
b = [-2 0 1 2 -4]
对于数组中的负值b
,例如-2 -4,我想将数组转换a
为负数,-1 和-1.3。
我使用了一个“for”循环,对于 700 000 列(可能是几个小时)寻找更快的方法来完成此操作需要太长时间。谢谢
a .* sign(b)
如果b
没有零元素,a
可以有任意元素。
解释:
逐项乘以a
的符号b
。
空修复:
要修复空错误,您可以像这样自己编写一个函数(伪代码):
function r = test_sign(b)
if b==0
r = 1;
else
r = sign(b);
end
您可以使用逻辑索引。
(首先我假设a
并且b
长度相同,否则您的问题没有意义)。
要获得一个TRUE
何时b
为负的向量,FALSE
否则,您可以这样做:
b < 0 % depending on what you want, b <= 0
您可以使用它作为索引a
来获取那些相应的元素:
a( b < 0 )
现在您已经选择了正确的元素,使它们成为负数并将它们分配回去:
a ( b < 0 ) = - a ( b < 0 );
在效率方面,您可能希望存储向量b < 0
以避免重新计算它(您必须尝试查看您更喜欢哪个):
idx = b < 0;
a(idx) = -a(idx);
Matlab 是一种矢量化语言,所以大多数时候都有一个for
循环,你可以避免它。在此处阅读有关此类矩阵索引的信息。