Julia数组元素平方赋值问题:为何修改B会同步改变A?
解决数组元素平方的问题
嘿,我来帮你搞定这个Julia里的数组操作问题~
首先咱们先拆解你遇到的两个问题:
为什么B = A后修改B,A也跟着变?
在Julia里,B = A并不是创建一个A的副本,而是让变量B指向同一个数组对象。也就是说,A和B其实是同一个数组的两个名字而已。所以你在循环里修改B[i]的时候,本质上就是在修改A的元素,最后两者的值当然完全相同啦。
为什么B = A^2会报错?
这里的^运算符对于数组来说,是矩阵幂运算(也就是矩阵乘法的多次运算)。你的A是1×20的行向量,A^2相当于尝试计算A * A,但矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数,1×20和1×20显然不满足这个条件,所以会触发维度不匹配的错误。
正确的几种实现方式
下面给你几个靠谱的方法来得到每个元素平方后的数组B:
广播运算(最推荐,Julia风格)
用广播运算符.来实现元素级的平方操作,这是Julia里处理元素级数组运算的标准方式:using Distributions A = rand(Uniform(1,10),1,20) B = A .^ 2 # 每个元素单独平方循环方式(先创建新数组)
如果一定要用循环,记得先创建一个和A维度、类型一致的新数组,而不是直接引用A:using Distributions A = rand(Uniform(1,10),1,20) B = similar(A) # 创建空的同维度数组 for i in 1:length(A) B[i] = A[i]^2 end如果你需要完全复制A再修改,也可以用
B = copy(A),然后再循环修改B的元素,这样也不会影响原数组A。数组推导式
用推导式直接生成新数组,写法简洁直观:using Distributions A = rand(Uniform(1,10),1,20) B = [x^2 for x in A]
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

