我已经尝试了下面的方法,它起作用了。
a=[1,2,3]
b=[5,6,7]
for i=1:3
a=replace(a,a[i]=>b[i]*a[i])
end结果显示: a=5,12,21,这是我想要的产品,元素级产品。
然而,我试图使用相同的方法来获得我想要的产品,但它不起作用。
a=[]
for i=1:10
a=push!(a,2^i)
end
for i=1:10
a=replace(a,a[i]=>a[i]*a[i])
end但结果是
a=[65536,65536,4096,65536,1048576,4096,16384,65536,262144,1048576]我想要让步
a=[4,16,64,256,1024,4096,16384,65536,262144,1048576]发布于 2020-04-18 19:35:29
这里的问题是,replace可能不会执行您想要的操作。该命令
replace(A, old => new)获取一个集合A并创建一个新集合,其中每次出现old时都将替换为new。
所以,如果我们看一下你的例子,在第一次迭代中,我们用4替换了所有出现的a[1] == 2。这就产生了
a == [4, 4, 8, 16, 32, 64, 128, 256, 512, 1024]在第二次迭代中,我们用16替换所有出现的a[2] == 4。这就产生了
a == [16, 16, 8, 16, 32, 64, 128, 256, 512, 1024]诸若此类。这应该可以解释为什么你会得到这样奇怪的结果。
除了奥斯卡·史密斯在他的评论中提到的广播a .= a .* a或a .= a .^ 2之外,您还可以使用函数map
a = map(x -> x^2, a)或map!
map!(x -> x^2, a, a)map和map!之间的区别在于,map会创建一个新版本,而map!会写入已有的集合。在此示例中,输入集合与输出集合相同。
https://stackoverflow.com/questions/61262227
复制相似问题