我在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'循环,这对于70万列(可能是几小时)来说需要太长时间 寻找更快的方法来实现这一目标。 感谢
答案 0 :(得分:2)
a .* sign(b)
没有零元素,则{p> b
有效,a
可以包含任意元素。
<强>解释强>
将a
逐项与b
的符号相乘。
空修:
要修复null错误,您可以自己编写一个函数(伪代码):
function r = test_sign(b)
if b==0
r = 1;
else
r = sign(b);
end
答案 1 :(得分:1)
您可以使用逻辑索引。
(首先我假设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
循环,你可以避免它。阅读有关此类矩阵索引的here。