numpy条件列表成员元素wis

2024-05-23 17:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2D numpy数组:

a = np.array([[0,1],
              [2,3]])

我有一个要保存的值列表:

vals_keep = [1,2]

我想测试数组中每个元素的列表成员资格。比如:

mask = a in vals_keep

我想要的结果是:

array([[False,  True],
       [True,  False]])

Tags: innumpyfalsetrue元素列表np成员
2条回答

你可以使用^{}

isin is an element-wise function version of the python keyword in

np.isin(a, vals_keep)

array([[False,  True],
       [ True, False]])

isin的另一个好处是,它可以灵活地处理不同维度的数组:

a = np.arange(4).reshape(1,2,2,1)
np.isin(a, vals_keep)

array([[[[False],
         [ True]],

        [[ True],
         [False]]]])

以下是使用广播的一种方法:

In [35]: (a[:, :, None] == vals_keep).any(2)
Out[35]: 
array([[False,  True],
       [ True, False]])

对于小数组(小于100行),它比isin快:

In [37]: %timeit np.isin(a, vals_keep)
22 µs ± 728 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [38]: %timeit (a[:, :, None] == vals_keep).any(2)
12.6 µs ± 95.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

对于大型数组,最好使用isin,因为在3D中广播对于大型数组/矩阵不是很有效。你知道吗

相关问题 更多 >