让索引返回一个矩阵而不是 julia 中的向量

Jon*_*nas 8 matrix julia

当您在 Julia 中为矩阵建立索引,并且您的选择是单列或单行时,结果将表示为向量。类似地,当您索引单个点时,您将获得该点的值,而不是 1x1 矩阵。

但是,对于我的用例,我希望我的答案也是一个矩阵,因为向量的方向具有意义,我不想丢失。

因此,给出以下示例矩阵:

julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4
Run Code Online (Sandbox Code Playgroud)

我得到:

julia> A[:, 1]
2-element Vector{Int64}:
 1
 3

julia> A[1, :]
2-element Vector{Int64}:
 1
 2

julia> A[1, 1]
 1
Run Code Online (Sandbox Code Playgroud)

但我想要:

julia> A[:, 1]
2×1 Matrix{Int64}:
 1
 3

julia> A[1, :]
1×2 Matrix{Int64}:
 1 2

julia> A[1, 1]
1×1 Matrix{Int64}:
 1
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来实现这一目标?

现在我做这样的事情:

function getindex_asmatrix(A::Matrix, i, j)
    # If i & j are Integers convert point to 1x1 Matrix
    # If only j == Integer make a nx1 Matrix
    # If only i == Integer make a 1xm Matrix
    # else do A[i, j]
end
Run Code Online (Sandbox Code Playgroud)

但我觉得可能有一个更优雅的解决方案。

Bog*_*ski 15

只需使用1:1(range) 而不是1,例如:

julia> A[:, 1:1]
2×1 Matrix{Int64}:
 1
 3

julia> A[1:1, :]
1×2 Matrix{Int64}:
 1  2

julia> A[1:1, 1:1]
1×1 Matrix{Int64}:
 1
Run Code Online (Sandbox Code Playgroud)

您也可以[1]改用,但它会分配,而1:1不会分配。