Julia 数组索引集的缩写

phi*_*inz 4 multidimensional-array julia

考虑两个不同大小的矩阵

\n
julia> A= ones(Float64,3,3)\n3\xc3\x973 Matrix{Float64}:\n 1.0  1.0  1.0\n 1.0  1.0  1.0\n 1.0  1.0  1.0\n\njulia> B = ones(Float64,2,2)\n2\xc3\x972 Matrix{Float64}:\n 1.0  1.0\n 1.0  1.0\n
Run Code Online (Sandbox Code Playgroud)\n

有没有简写

\n
julia> A[1:size(B)[1],1:size(B)[2]]\n2\xc3\x972 Matrix{Float64}:\n 1.0  1.0\n 1.0  1.0\n
Run Code Online (Sandbox Code Playgroud)\n

以像“”这样的好函数的形式julia> A[indices(B)](不幸的是它不存在ERROR: UndefVarError: indices not defined)?

\n

Cam*_*nek 6

您可以调用axes(B)以获取包含有效索引的元组B

\n
julia> A = ones(3, 3)\n3\xc3\x973 Matrix{Float64}:\n 1.0  1.0  1.0\n 1.0  1.0  1.0\n 1.0  1.0  1.0\n\njulia> B = ones(2, 2)\n2\xc3\x972 Matrix{Float64}:\n 1.0  1.0\n 1.0  1.0\n\njulia> axes(B)\n(Base.OneTo(2), Base.OneTo(2))\n
Run Code Online (Sandbox Code Playgroud)\n

因此,您可以解压元组并将其用于索引A

\n
julia> A[axes(B)...]\n2\xc3\x972 Matrix{Float64}:\n 1.0  1.0\n 1.0  1.0\n
Run Code Online (Sandbox Code Playgroud)\n

正如 Bogumil Kaminski 在评论中指出的那样,您还可以使用CartesianIndices

\n
julia> A[CartesianIndices(B)]\n2\xc3\x972 Matrix{Float64}:\n 1.0  1.0\n 1.0  1.0\n
Run Code Online (Sandbox Code Playgroud)\n

  • 或 `A[笛卡尔指数(B)]` (3认同)