防止Julia自动转换1D矩阵切片的类型

Nic*_*ick 6 types slice julia

alpha = [1 2 3; 4 5 6]
alpha[:, 1] # Type is Array{Int64, 1}
alpha[:, 1:2] # Type is Array{In64, 2}
Run Code Online (Sandbox Code Playgroud)

我只是想阻止自动类型转换,但我很难搞清楚如何做到这一点.是的,我可以去alpha[:, 1]'',但我想阻止内存重新分配.有vec()另一个方向(1xn矩阵),但我找不到保持(nx1)矩阵为矩阵的函数.

jub*_*0bs 6

使用长度为1的范围而不仅仅是索引

而不是简单地指定索引(Int64所需的列的),指定的范围(UnitRange{Int64}的)长度1:1:1.

这将欺骗Julia保留2D数组类型(Array{Int64,2})而不是返回vector(Array{Int64,1}).

编辑:开发人员在这里讨论了这个主题(感谢Colin指点我).

julia> alpha = [1 2 3; 4 5 6]
2x3 Array{Int64,2}:
 1  2  3
 4  5  6

julia> alpha[:,1]            # nope
2-element Array{Int64,1}:
 1
 4    

julia> alpha[:,1:1]          # yep
2x1 Array{Int64,2}:
 1
 4
Run Code Online (Sandbox Code Playgroud)