朱莉娅-替换

时间:2020-04-17 00:21:55

标签: replace julia

我尝试了以下方法,并且有效。

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]

1 个答案:

答案 0 :(得分:3)

这里的问题是replace可能无法满足您的要求。命令

replace(A, old => new)

获取一个集合A并创建一个新集合,其中每次出现的oldnew替换。

因此,如果我们看一下您的示例,则在第一次迭代中,我们将每次出现的a[1] == 2替换为4。这样产生

a == [4, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

在第二次迭代中,我们将每次出现的a[2] == 4替换为16。这样产生

a == [16, 16, 8, 16, 32, 64, 128, 256, 512, 1024]

,依此类推。这应该可以解释为什么您会得到奇怪的结果。

除了奥斯卡·史密斯(Oscar Smith)在其评论中提到的广播a .= a .* aa .= a .^ 2,您还可以使用功能map

a = map(x -> x^2, a)

map!

map!(x -> x^2, a, a)

mapmap!之间的区别在于,map创建了一个新版本,而map!写入了一个已经存在的集合中。在此示例中,输入集合与输出集合相同。