Types 防止Julia自动转换一维矩阵切片的类型
我只是想阻止自动类型转换,但我很难弄清楚如何做到这一点。是的,我可以直接去Types 防止Julia自动转换一维矩阵切片的类型,types,julia,slice,Types,Julia,Slice,我只是想阻止自动类型转换,但我很难弄清楚如何做到这一点。是的,我可以直接去alpha[:,1]',但我想阻止内存重新分配。有vec()用于向另一个方向(1xn矩阵)移动,但我找不到一个函数将(nx1)矩阵保持为矩阵。使用长度为1的范围,而不仅仅是索引 与其简单地指定所需列的索引(Int64),不如指定长度为1:1:1的范围(UnitRange{Int64}) 这将诱使Julia保留2D数组类型(array{Int64,2}),而不是返回向量(array{Int64,1}) 编辑:开发人员讨论了这
alpha[:,1]'
,但我想阻止内存重新分配。有vec()
用于向另一个方向(1xn矩阵)移动,但我找不到一个函数将(nx1)矩阵保持为矩阵。使用长度为1的范围,而不仅仅是索引
与其简单地指定所需列的索引(Int64
),不如指定长度为1:1:1
的范围(UnitRange{Int64}
)
这将诱使Julia保留2D数组类型(array{Int64,2}
),而不是返回向量(array{Int64,1}
)
编辑:开发人员讨论了这个主题(感谢)
谢谢,非常方便。你怎么知道要这么做?“是在文档中的某个地方,还是你刚刚搞定的?”尼克胡闹。我仍在与Julia打交道
:)
不过,文档中可能会提到这一点。等我做完这一切,我会回来报到的。哈哈,是的。我一直在用@code\u lowered进行实验,以找出一半的时间发生了什么,但我仍然没有习惯于理解ASTsso,奇怪的是,alpha[:,1]“
生成的程序集比@code\u native
给出的alpha[:,1:1]
少得多。我想,如果没有基准测试,很难说哪个更快……开发人员对这个主题的讨论是。这里间接提到了范围的技巧。我认为它不在文档中(从内存中)。
alpha = [1 2 3; 4 5 6]
alpha[:, 1] # Type is Array{Int64, 1}
alpha[:, 1:2] # Type is Array{In64, 2}
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