Numpy:根据其某些元素的多个条件选择行

Numpy: Selecting Rows based on Multiple Conditions on Some of its Elements

我相信这不是一个重复的问题,尽管网站上有一些与此问题非常接近的问题。给定某些元素的一组条件,我想从 numpy 列表中分离出一行。这是一个例子,考虑数组 Z:

>>> Z = [[1,0,3,4], [1,1,3,6], [1,2,3,9], [1,3,4,0], [2,1,4,5]]
>>> Z = np.array(Z)
>>> Z
array([[1, 0, 3, 4],
       [1, 1, 3, 6],
       [1, 2, 3, 9],
       [1, 3, 4, 0],
       [2, 1, 4, 5]])

并说我想隔离第一个和第二个元素都是 1 的行。执行的命令应该输出行

np.array([[1, 1, 3, 6]])

但是,如果我按照,做一个直观的扩展,比如:

Z[Z[:,0] == 1 & Z[:,1] == 1, :]

我得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有什么快速解决办法吗?我不想遍历我的列表。我想知道是否有一种快速的“numpy”方式。

优雅是np.equal

Z[np.equal(Z[:, [0,1]], 1).all(axis=1)]

或者:

Z[np.equal(Z[:,0], 1) & np.equal(Z[:,1], 1)]