【发布时间】:2019-10-21 23:45:21
【问题描述】:
我有一个形状为 (1, 1, 5, 7) 的 ndarray,它看起来像这样:
array[0][0] =
[[ 0. 5. 0.9 0.6 0.3 0.8 0.7]
[ 0. 5. 0.5 0.2 0.2 0.4 0.7]
[ 0. 9. 0.6 0.8 0.4 1. 1. ]
[ 0. 9. 0.5 0.8 0.3 0.9 0.6]
[ 0. 16. 0.6 0.1 0. 0.4 0.4]]
我只想选择第二列的值为5 或9 的行。
为此,我创建了一个列表list = [5, 9] 和下面的一个函数来检查第二列的值是否是list 中的值:
def check(list, array):
tf_array = np.zeros(np.shape(array))
for l in list:
for i, element in enumerate(array):
if element == l:
tf_array[i] = True
return tf_array
然后我使用np.compress(check(list, array[0, 0, :, 1]), array, axis=2) 来提取第二列的值是列表中任一列的行。
但是,我觉得必须有一个更简单的方法!抱歉,因为我对 Numpy 很陌生,所以请有人帮我解决这个问题吗?非常感谢!
编辑
感谢您的回答!抱歉,我忘了提到该列表是通用的,我希望能够指定它。我突然想起可以使用条件not in 结合np.where 和np.delete 所以我的问题现在解决了!
【问题讨论】:
-
试试
array[:, 2] == 5 | array[:, 2] == 9,或查看np.isin -
你显示
array[0,0]。array[0,0,:,1]长什么样子?
标签: python numpy numpy-ndarray