在 julia 中使用 Julia Broadcasting 根据索引计算数组值

Computing array values based on their index using Julia Broadcasting in julia

我想计算一个数组,使得 a[i,1] = (l*i)/k 其中 lk 是常量标量值,i 是行号。 明显的解决方案是遍历所有 i 值并添加值,但我想使用 Julia Broadcasting 关于这个,我找不到任何关于这个的文档。

编辑:a 是一个二维零数组。

正在初始化:

jl> a = zeros(5, 2);

jl> k, l = 3, 2π;

您在这里有多种选择。对于普通数组,这将起作用:

jl> a[:, 1] .= l .* (1:size(a, 1)) ./ k
5-element view(::Matrix{Float64}, :, 1) with eltype Float64:
  2.0943951023931953
  4.1887902047863905
  6.283185307179586
  8.377580409572783
 10.471975511965978

这个比较笼统,在我看来实际上更可取:

jl> a[:, 1] .= l .* axes(a, 1) ./ k

有关 axes(a, n) 的更多上下文,这是获取数组的任何(或所有)维度的索引的通用方法。 axes(a, 1) returns Base.OneTo(5),如果你 collect 它(不要那样做,顺便说一句)是

jl> collect(axes(a, 1))
5-element Vector{Int64}:
 1
 2
 3
 4
 5

如果没有维度参数,您将获得所有维度,在本例中为两个维度:

jl> axes(a)
(Base.OneTo(5), Base.OneTo(2))

axes 优于 1:size(a, 1),因为它也适用于具有从零开始或其他类型索引的数组。