Matlab:基于数组b修改数组a

时间:2012-04-13 23:54:16

标签: arrays matlab

我在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万列(可能是几小时)来说需要太长时间 寻找更快的方法来实现这一目标。 感谢

2 个答案:

答案 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)

您可以使用逻辑索引。

(首先我假设ab具有相同的长度或您的问题没有意义。)

要获得TRUEb为负时的向量,否则为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