0

我在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 列(可能是几个小时)寻找更快的方法来完成此操作需要太长时间。谢谢

4

2 回答 2

2

a .* sign(b)如果b没有零元素,a可以有任意元素。

解释:

逐项乘以a的符号b

空修复:

要修复空错误,您可以像这样自己编写一个函数(伪代码):

function r = test_sign(b)
if b==0
   r = 1;
else
   r = sign(b);
end
于 2012-04-14T00:02:26.810 回答
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循环,你可以避免它。在此处阅读有关此类矩阵索引的信息。

于 2012-04-14T00:01:57.810 回答