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

时间:2014-11-26 16:14:36

标签: types julia slice

alpha = [1 2 3; 4 5 6]
alpha[:, 1] # Type is Array{Int64, 1}
alpha[:, 1:2] # Type is Array{In64, 2}

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

1 个答案:

答案 0 :(得分:6)

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

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

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

修改:开发人员讨论了此主题here(感谢Colin for pointing me to it)。

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