首页 > 解决方案 > 使用 Julia 中的 Julia 广播根据它们的索引计算数组值

问题描述

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

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

标签: juliaarray-broadcasting

解决方案


初始化:

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)返回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)因为它也适用于具有从零开始或其他类型索引的数组。


推荐阅读