让Julia返回一个矩阵而不是向量进行索引。

8
当你在Julia中索引矩阵时,如果所选的是单列或单行,则结果将表示为向量。同样地,当你索引单个点时,你会得到该点的值,而不是一个1x1的矩阵。
然而,在我的用例中,我也希望答案是一个矩阵,因为向量的方向具有意义,我不想失去它。
因此,考虑以下示例矩阵:
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

我得到:

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

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

julia> A[1, 1]
 1

但是我想要:

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

有没有简单的方法来实现这个?

目前我做了以下操作:

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

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

1个回答

15

使用1:1(范围)代替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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接