是否有与 NumPy 的省略号切片语法 (...) 等效的 Julia?
Posted
技术标签:
【中文标题】是否有与 NumPy 的省略号切片语法 (...) 等效的 Julia?【英文标题】:Is there a Julia equivalent to NumPy's ellipsis slicing syntax (...)? 【发布时间】:2015-07-21 11:51:04 【问题描述】:在 NumPy 中,ellipsis syntax 用于
填写多个
:
,直到切片说明符的数量与数组的维度相匹配。
(转述this answer)。
我如何在 Julia 中做到这一点?
【问题讨论】:
【参考方案1】:他们要走的路是EllipsisNotation.jl,它将..
添加到语言中。
例子:
julia> using EllipsisNotation
julia> x = rand(1,2,3,4,5);
julia> x[..,3] == x[:,:,:,:,3]
true
julia> x[1,..] == x[1,:,:,:,:]
true
julia> x[1,1,..] == x[1,1,:,:,:]
true
(@mschauer 已经注意到他的答案(编辑),但参考在最后,我觉得这个问题应该得到一个干净的最新答案。)
【讨论】:
【参考方案2】:还没有,但如果你愿意,你可以自己动手。
import Base.getindex, Base.setindex!
const .. = Val:...
setindex!T(A::AbstractArrayT,1, x, ::TypeVal:..., n) = A[n] = x
setindex!T(A::AbstractArrayT,2, x, ::TypeVal:..., n) = A[ :, n] = x
setindex!T(A::AbstractArrayT,3, x, ::TypeVal:..., n) = A[ :, :, n] =x
getindexT(A::AbstractArrayT,1, ::TypeVal:..., n) = A[n]
getindexT(A::AbstractArrayT,2, ::TypeVal:..., n) = A[ :, n]
getindexT(A::AbstractArrayT,3, ::TypeVal:..., n) = A[ :, :, n]
那你就可以写了
> rand(3,3,3)[.., 1]
3x3 ArrayFloat64,2:
0.0750793 0.490528 0.273044
0.470398 0.461376 0.01372
0.311559 0.879684 0.531157
如果您想要更精细的切片,您需要生成/扩展定义或使用分段函数。
编辑:如今,见https://github.com/ChrisRackauckas/EllipsisNotation.jl
【讨论】:
还有更多关于 github 问题的讨论(来自您):github.com/JuliaLang/julia/issues/5405以上是关于是否有与 NumPy 的省略号切片语法 (...) 等效的 Julia?的主要内容,如果未能解决你的问题,请参考以下文章
只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是有效的索引
RandomForest IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引
只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是生成 rnn 的有效索引