Arrays Matlab:基于阵列b修改阵列a
我在matlab中有两个数组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
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