【问题标题】:How to select rows in a ndarray based on list condition如何根据列表条件选择ndarray中的行
【发布时间】: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]]

我只想选择第二列的值为59 的行。

为此,我创建了一个列表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.wherenp.delete 所以我的问题现在解决了!

【问题讨论】:

  • 试试array[:, 2] == 5 | array[:, 2] == 9,或查看np.isin
  • 你显示array[0,0]array[0,0,:,1] 长什么样子?

标签: python numpy numpy-ndarray


【解决方案1】:

首先,您必须将数组更改为二维,试试这个:

import numpy as np

a=np.array([[ 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]])

for l in a:
    if l[1]==5 or l[1]==9:
        print(l)

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 2016-09-16
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多