列表中的python数组索引列表

列表中的python数组索引列表,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,我想做数组索引。我本来希望结果是[0,1,1,0],但是我得到了一个错误。我如何做这种类型的索引 a_np_array=np.array(['a','b','c','d']) print a_np_array in ['b', 'c'] Traceback (most recent call last): File "dfutmgmt_alpha_osis.py", line 130, in <module> print a_np_array in ['b', 'c'] Value

我想做数组索引。我本来希望结果是[0,1,1,0],但是我得到了一个错误。我如何做这种类型的索引

a_np_array=np.array(['a','b','c','d'])
print a_np_array in ['b', 'c']

Traceback (most recent call last):
File "dfutmgmt_alpha_osis.py", line 130, in <module>
print a_np_array in ['b', 'c']
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
a_np_array=np.array(['a','b','c','d'])
在['b','c'中打印一个\u np\u数组
回溯(最近一次呼叫最后一次):
文件“dfutmgmt_alpha_osis.py”,第130行,在
在['b','c'中打印一个\u np\u数组
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
在上面,我实际上是想说[False,True,True,False]而不是[0,1,1,0],因为我想要布尔值,所以我可以做索引


利用
int(True)==1
int(False)==0
这一事实,首先不能在这里使用
[0,1,1,0]
进行索引,因此使用了错误的术语

>>> a_np_array[[0,1,1,0]]  # Not useful at all
array(['a', 'b', 'b', 'a'], 
      dtype='|S1')
如果我理解正确的话,您只是想检查
a\u np\u数组的项是否存在于
['b','c']
中,以便使用
numpy.in1d
,但当它返回布尔数组时,我们只需要将其转换为整数数组

>>> np.in1d(a_np_array, ['b','c'])
array([False,  True,  True, False], dtype=bool)
>>> np.in1d(a_np_array, ['b','c']).astype(int)
array([0, 1, 1, 0])
来看看为什么['b','c']中的a\u np\u数组不起作用?

这里,中的
操作符将调用列表对象的方法(
['b','c']
),然后对于列表中的每个对象,Python将使用该方法将每个项与
a\u np\u数组进行比较
PyObject\u richcomarebool
首先简单地检查要比较的项目是否是相同的对象,即相同的
id()
,如果是,立即返回1,否则调用它们。因此,这将起作用:

>>> a_np_array in [a_np_array, 'c', 'a']
True
但这不会:

>>> a_np_array in [a_np_array.copy(), 'c', 'a']
Traceback (most recent call last):
  File "<ipython-input-405-dfe2729bd10b>", line 1, in <module>
    a_np_array in [a_np_array.copy(), 'c', 'a']
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

源代码链接:


好的。我检查了文档,这似乎就是我要找的。你能解释一下为什么我的方法不起作用吗?我很惊讶没有类似数组索引的方法可以做到这一点。我已经移动了我的评论,并给出了更多的解释。
>>> a_np_array in [a_np_array.copy(), 'c', 'a']
Traceback (most recent call last):
  File "<ipython-input-405-dfe2729bd10b>", line 1, in <module>
    a_np_array in [a_np_array.copy(), 'c', 'a']
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> bool(a_np_array == 'a')
Traceback (most recent call last):
  File "<ipython-input-403-b7ced85c4f02>", line 1, in <module>
    bool(a_np_array == 'a')
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()