将切片索引存储为对象

D A*_*ams 3 python indexing nested numpy

假设我有一个列表列表等......有一定深度:

ExampleNestedObject = numpy.ones(shape = (3,3,3,3,3))
Run Code Online (Sandbox Code Playgroud)

一般来说,我可以通过写作来获得一个元素:

#Let:
#a, b, c, d, e -> are integers

print ExampleNestedObject[a][b][c][d][e]

#numpy also happens to allow:

print ExampleNestedObject[(a,b,c,d,e)]

#python in general allows:

print ExampleNestedObject[a,b,:,d,e]
Run Code Online (Sandbox Code Playgroud)

我的问题是 -> 如何将索引 "a,b,:,d,e" 存储为对象?

SomeSliceChoice = a,b,:,d,e

print ExampleNestedObject[SomeSliceChoice]
Run Code Online (Sandbox Code Playgroud)

D A*_*ams 5

诀窍是将索引对象视为切片对象的元组。

示例 1:

Object[1,2,:] == Object[(1,2,slice(None,None,None))]
Run Code Online (Sandbox Code Playgroud)

示例2:

WantedSliceObject = (1,2,slice(None,None,None), 4,5)
Object[1,2,:,4,5] == Object[WantedSliceObject]
Run Code Online (Sandbox Code Playgroud)

注意 '''slice 的语法:

#slice(start, stop[, step])

#1 ==  slice(1, 2, 1)

WantedSliceObject2 = (
   slice(1, 2, 1),
   slice(2, 2, 1),
   slice(None,None,None), 
   slice(4, 2, 1),
   slice(5, 2, 1)
   )

#WantedSliceObject2 == WantedSliceObject
Run Code Online (Sandbox Code Playgroud)