[英]Mask of boolean 2D numpy array with True values for elements contained in another 1D numpy array
[英]numpy mask for 2d array with all values in 1d array
我想基于1d矩阵中的日期将日期的2d矩阵转换为布尔型矩阵。 即
[[20030102, 20030102, 20070102],
[20040102, 20040102, 20040102].,
[20050102, 20050102, 20050102]]
应该成为
[[True, True, False],
[False, False, False].,
[True, True, True]]
如果我提供一维数组[20010203,20030102,20030501,20050102,20060101]
import numpy as np
dateValues = np.array(
[[20030102, 20030102, 20030102],
[20040102, 20040102, 20040102],
[20050102, 20050102, 20050102]])
requestedDates = [20010203, 20030102, 20030501, 20050102, 20060101]
ix = np.in1d(dateValues.ravel(), requestedDates).reshape(dateValues.shape)
print(ix)
返回:
[[ True True True]
[False False False]
[ True True True]]
有关更多信息(文档),请参考numpy.in1d
: http : numpy.in1d
a = np.array([[20030102, 20030102, 20070102],
[20040102, 20040102, 20040102],
[20050102, 20050102, 20050102]])
b = np.array([20010203, 20030102, 20030501, 20050102, 20060101])
>>> a.shape
(3, 3)
>>> b.shape
(5,)
>>>
为了进行比较,您需要通过向a
添加轴来将b
广播到a
。 -将a
的每个元素与b
每个元素进行比较
>>> mask = a[...,None] == b
>>> mask.shape
(3, 3, 5)
>>>
然后使用np.any()
查看是否有任何匹配项
>>> np.any(mask, axis = 2, keepdims = False)
array([[ True, True, False],
[False, False, False],
[ True, True, True]], dtype=bool)
timeit.Timer与in1d
比较:
>>>
>>> t = Timer("np.any(a[...,None] == b, axis = 2)","from __main__ import np, a, b")
>>> t.timeit(10000)
0.13268041338812964
>>> t = Timer("np.in1d(a.ravel(), b).reshape(a.shape)","from __main__ import np, a, b")
>>> t.timeit(10000)
0.26060646913566643
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.