Arrays Matlab:基于阵列b修改阵列a

Arrays Matlab:基于阵列b修改阵列a,arrays,matlab,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”循环,这对于700000列(可能是几个小时)来说太长了 寻找一种更快的方法来实现这一点。 谢谢您可以使用逻辑索引 (首先我假设a和b长度相同,或者你的问题没有意义) 若要在b为负数而FALSE为负数时获得TRUE的向量,只需执行以下操作: b < 0 % depending on wh

我在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”循环,这对于700000列(可能是几个小时)来说太长了 寻找一种更快的方法来实现这一点。
谢谢

您可以使用逻辑索引

(首先我假设
a
b
长度相同,或者你的问题没有意义)

若要在
b
为负数而
FALSE
为负数时获得
TRUE
的向量,只需执行以下操作:

b < 0 % depending on what you want, b <= 0
现在您已经选择了正确的元素,将其设置为负数并重新分配:

a ( b < 0 ) = - a ( b < 0 );
a(b<0)=-a(b<0);
就效率而言,您可能希望存储向量
b<0
,以避免重新计算它(您必须尝试并查看您喜欢哪一种):

idx=b<0;
a(idx)=-a(idx);

Matlab是一种矢量化语言,因此大多数情况下,对于循环,都有一个
,您可以避免它。阅读这种矩阵索引。

您可以使用逻辑索引

(首先我假设
a
b
长度相同,或者你的问题没有意义)

若要在
b
为负数而
FALSE
为负数时获得
TRUE
的向量,只需执行以下操作:

b < 0 % depending on what you want, b <= 0
现在您已经选择了正确的元素,将其设置为负数并重新分配:

a ( b < 0 ) = - a ( b < 0 );
a(b<0)=-a(b<0);
就效率而言,您可能希望存储向量
b<0
,以避免重新计算它(您必须尝试并查看您喜欢哪一种):

idx=b<0;
a(idx)=-a(idx);
Matlab是一种矢量化语言,因此大多数情况下,对于
循环,都有一个
,您可以避免它。阅读这种矩阵索引。

a.*符号(b)
有效如果
b
没有零元素,
a
可以有任意元素

说明:

a
逐项乘以
b

空修复:

要修复空错误,您可以自己编写如下函数(伪代码):

a.*符号(b)
有效如果
b
没有零元素,
a
可以有任意元素

说明:

a
逐项乘以
b

空修复:

要修复空错误,您可以自己编写如下函数(伪代码):


谢谢你们帮我解决这个问题,我已经成功地完成了我想要的,在微秒级的时间里(之前)。非常感谢。然后请接受你使用的答案(点击左上角的勾号)。感谢你们帮助我解决这个问题,我已经成功地完成了我想要的,在微秒级的时间内(之前)。非常感谢。然后请接受你使用的答案(点击左上角的勾号)。感谢你们帮助我解决这个问题,我已经成功地完成了我想要的,在微秒级的时间内(之前)。真的很感激。谢谢你们帮我解决这个问题,我已经成功地完成了我想要的,在微秒级的时间里(之前)。非常感谢。
function r = test_sign(b)
if b==0
   r = 1;
else
   r = sign(b);
end