我是 Julia 的新手,我正在尝试从 Mathematica 中的现有代码迁移。我想做的是:用一个向量数组,从中减去一个常量向量。这是我想要的:
a=[[1, 2], [1, 3]]
println(a)
b=a.-[1,1]
println(b)
我想要 b=[[0,1],[0,2]]
但它给我关于维度不匹配的错误。对于 Julia 中“向量列表”和“矩阵”之间的区别,我有点不知所措。我不确定做这两种不同的事情的正确方法是什么。
然后我尝试广播,但它也不起作用
a=([1, 2], [1, 3])
println(a)
b=broadcast(-,[1,1],a)
println(b)
最后,我试过了
a=([1, 2], [1, 3])
println(a)
b=a.-([1,1],)
println(b)
它奏效了。
我的问题: 为什么前两个不起作用? 这是一个 hack walkaround 还是我应该在未来使用它?
最佳答案
您需要使用 Ref
来避免对差异的第二个参数进行矢量化:
julia> a .- Ref([1,1])
2-element Vector{Vector{Int64}}:
[0, 1]
[0, 2]
如果没有它,您将迭代 a
的元素以及 [1, 1]
的元素,最终计算出向量和标量之间的非向量化差异,因此它没有用。
关于arrays - Julia 中数组数组的逐元素操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72669827/