2024-05-23 17:22:06 发布
网友
我有一个2D numpy数组:
a = np.array([[0,1], [2,3]])
我有一个要保存的值列表:
vals_keep = [1,2]
我想测试数组中每个元素的列表成员资格。比如:
mask = a in vals_keep
我想要的结果是:
array([[False, True], [True, False]])
你可以使用^{}
isin is an element-wise function version of the python keyword in
isin
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中广播对于大型数组/矩阵不是很有效。你知道吗
你可以使用^{}
isin
的另一个好处是,它可以灵活地处理不同维度的数组:以下是使用广播的一种方法:
对于小数组(小于100行),它比
isin
快:对于大型数组,最好使用
isin
,因为在3D中广播对于大型数组/矩阵不是很有效。你知道吗相关问题 更多 >
编程相关推荐