首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia -替换

Julia -替换
EN

Stack Overflow用户
提问于 2020-04-17 08:21:56
回答 1查看 99关注 0票数 1

我已经尝试了下面的方法,它起作用了。

代码语言:javascript
复制
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,这是我想要的产品,元素级产品。

然而,我试图使用相同的方法来获得我想要的产品,但它不起作用。

代码语言:javascript
复制
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

但结果是

代码语言:javascript
复制
a=[65536,65536,4096,65536,1048576,4096,16384,65536,262144,1048576]

我想要让步

代码语言:javascript
复制
a=[4,16,64,256,1024,4096,16384,65536,262144,1048576]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-18 19:35:29

这里的问题是,replace可能不会执行您想要的操作。该命令

代码语言:javascript
复制
replace(A, old => new)

获取一个集合A并创建一个新集合,其中每次出现old时都将替换为new

所以,如果我们看一下你的例子,在第一次迭代中,我们用4替换了所有出现的a[1] == 2。这就产生了

代码语言:javascript
复制
a == [4, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

在第二次迭代中,我们用16替换所有出现的a[2] == 4。这就产生了

代码语言:javascript
复制
a == [16, 16, 8, 16, 32, 64, 128, 256, 512, 1024]

诸若此类。这应该可以解释为什么你会得到这样奇怪的结果。

除了奥斯卡·史密斯在他的评论中提到的广播a .= a .* aa .= a .^ 2之外,您还可以使用函数map

代码语言:javascript
复制
a = map(x -> x^2, a)

map!

代码语言:javascript
复制
map!(x -> x^2, a, a)

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61262227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档