Replace 朱莉娅-替换
我试过下面的方法,效果很好Replace 朱莉娅-替换,replace,julia,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
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]
这里的问题是,
replace
可能不符合您的要求。命令
replace(A, old => new)
获取一个集合a
,并创建一个新集合,其中每次出现的old
都被new
替换
因此,如果我们看一下您的示例,在第一次迭代中,我们用4
替换a[1]==2
。这就产生了
a == [4, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
a == [16, 16, 8, 16, 32, 64, 128, 256, 512, 1024]
在第二次迭代中,我们用16
替换出现的a[2]==4
。这就产生了
a == [4, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
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代码>写入已存在的集合。在本例中,输入集合与输出集合相同。这里的问题是,replace
可能无法执行您想要的操作。命令
replace(A, old => new)
获取一个集合a
,并创建一个新集合,其中每次出现的old
都被new
替换
因此,如果我们看一下您的示例,在第一次迭代中,我们用4
替换a[1]==2
。这就产生了
a == [4, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
a == [16, 16, 8, 16, 32, 64, 128, 256, 512, 1024]
在第二次迭代中,我们用16
替换出现的a[2]==4
。这就产生了
a == [4, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
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代码>写入已存在的集合。在本例中,输入集合与输出集合相同。是否有理由不使用a.=a.*a
?大多数人都会觉得这件衣服很干净,奥斯卡·史密斯,谢谢你的回答!:)我还没试过这个!因为我将在这个操作之外有另一个for循环,所以我不确定这个操作是如何工作的,你建议的操作。在文档中查找的内容基本上是广播
使操作按元素应用。好的!非常感谢!~:)它起作用了!非常感谢你!:)有什么理由不想只使用a.=a.*a
?大多数人都会觉得这件衣服很干净,奥斯卡·史密斯,谢谢你的回答!:)我还没试过这个!因为我将在这个操作之外有另一个for循环,所以我不确定这个操作是如何工作的,你建议的操作。在文档中查找的内容基本上是广播
使操作按元素应用。好的!非常感谢!~:)它起作用了!非常感谢你!:)谢谢你,西蒙!解释得很好!现在我明白了!:)谢谢你,西蒙!解释得很好!现在我明白了!:)