为了解决只能逐个元素的问题,我需要将NumPy的元组索引与显式切片结合起来。
def f(shape, n):
"""
:param shape: any shape of an array
:type shape: tuple
:type n: int
"""
x = numpy.zeros( (n,) + shape )
for i in numpy.ndindex(shape): # i = (k, l, ...)
x[:, k, l, ...] = numpy.random.random(n)
x[:, *i]
会产生SyntaxError
,x[:, i]
会被解释为numpy.array([ x[:, k] for k in i ])
。遗憾的是,由于x = numpy.zeros(shape+(n,))
的进一步使用,不可能将n维作为最后一个(x[i] = numpy.random.random(n)
x
)。
编辑:这里有一些例子希望发表评论。
>>> n, shape = 2, (3,4)
>>> x = np.arange(24).reshape((n,)+(3,4))
>>> print(x)
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
>>> i = (1,2)
>>> print(x[ ??? ]) # '???' expressed by i with any length is the question
array([ 6, 18])
答案 0 :(得分:4)
如果我正确理解了这个问题,你就会有一个多维的numpy数组,想要通过将:
切片与元组i
中的一些其他索引相结合来对其进行索引。
numpy数组的索引是一个元组,所以你基本上可以将这些'部分'索引组合成一个元组并将其用作索引。一个天真的方法可能看起来像这样
x[ (:,) + i ] = numpy.random.random(n) # does not work
但这会产生语法错误。而不是:
,您必须使用内置的slice
。
x[ (slice(None),) + i ] = numpy.random.random(n)