我正在尝试使用a = np.array( range( 37 ) )
print("a", a, file = sys.stderr)
c = chain(range(0,13), range(23,29 ) )
print( "list(c)", list(c), file = sys.stderr )
来实现 multirange 的概念,类似于串联的多个范围:
c
到目前为止,太好了。接下来,我想使用a[ range(2,8) ] => array( [2, 3, 4, 5, 6, 7 ] )
作为复合数组索引,类似于我可以说的
x = a[ c ]
print( "x", x, file = sys.stderr )
所以,去了:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-8-192fff14b87d> in <module>
3 c = chain(range(0,13), range(23,29 ) )
4 print( "list(c)", list(c), file = sys.stderr )
----> 5 x = a[c]
6 print( "x", x, file = sys.stderr )
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
但是...
list(c)
很显然,这是另一个Python索引之谜。有人可以告诉我我在做什么错,并帮助我弄清楚如何获得我的意图(“多范围”)。我知道我可以只使用#
进行索引,但是我认为这无济于事,也就是说,延迟枚举隐含的索引集。
答案 0 :(得分:0)
如错误所述,仅有效索引为integers
,slices
和ellipsis
这里c
是<class 'itertools.chain'>
您可以代替的是将其转换为列表,然后使用它。
>>> c = chain(range(0,13), range(23,29 ) )
>>> a[list(c)]
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26,
27, 28])