【发布时间】:2012-01-05 11:07:12
【问题描述】:
我想使用像这样的索引数组来获取numpy 数组的元素
import numpy
a = numpy.arange(6)
ind = [2,3]
现在,a[ind] 给了我第三和第四个元素,但我实际上想要a 的所有 other 元素。
有没有一种单行/优雅的方式来做到这一点?
【问题讨论】:
我想使用像这样的索引数组来获取numpy 数组的元素
import numpy
a = numpy.arange(6)
ind = [2,3]
现在,a[ind] 给了我第三和第四个元素,但我实际上想要a 的所有 other 元素。
有没有一种单行/优雅的方式来做到这一点?
【问题讨论】:
我知道没有一种直接的方法可以得到一组整数索引的补码。布尔索引否定很容易,它可以让你做这样的事情:
In [100]: a=np.arange(6)
In [101]: ind=[2,3]
In [102]: cind=(a==a)
In [103]: cind[ind]=False
In [104]: a[cind]
Out[104]: array([0, 1, 4, 5])
但这不是单线解决方案。
【讨论】:
np.ones(a.shape, 'bool')代替(a==a)
可能是这样的:
import numpy
a = numpy.arange(6)
ind = [1,3]
for x in range(6):
if x not in ind: print a[x]
【讨论】:
这之前已经在这里提出过,但这是一个列表理解,因此是一个单行:
numpy.array([a[i] for i in range(len(a)) if i not in ind])
结果
array([0, 1, 4, 5])
【讨论】: