给定范围内的二维NumPy阵列比较

2024-04-20 07:40:00 发布

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

如果我有一个二维的数字数组,我想看看数组中的每个值是否都在另一个二维数组中的某个范围内,那么如何使用NumPy高效地执行它?你知道吗

[[1,2,1],[2,3,2],[2,3,4],[1,2,3],[1,3,2]] is in range 1 with
[[1,2,1],[2,3,2],[2,3,4],[1,2,3],[1,3,2]] => TRUE

[[1,2,1],[2,3,2],[2,3,4],[1,2,3],[1,3,2]] is in range 1 with
[[0,3,0],[1,4,3],[1,4,5],[0,3,4],[0,4,3]] => TRUE

[[1,2,1],[2,3,2],[2,3,4],[1,2,3],[1,3,2]] is in range 1 with
[[0,4,0],[1,4,3],[1,4,5],[0,3,4],[0,4,3]] => FALSE

最后一个是FALSE,因为索引0.1上的项的on是4,这意味着abs(2-4)>;1


Tags: ingtnumpyfalsetrueisonwith
1条回答
网友
1楼 · 发布于 2024-04-20 07:40:00

使用numpy的矢量化算术和all可以很容易地做到这一点。例如:

>>> a = np.array([[1,2,1],[2,3,2],[2,3,4],[1,2,3],[1,3,2]])
>>> b = np.array([[1,2,1],[2,3,2],[2,3,4],[1,2,3],[1,3,2]])
>>> abs(a-b)
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])
>>> abs(a-b) <= 1
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]], dtype=bool)
>>> (abs(a-b) <= 1).all()
True

以及

>>> a2 = np.array([[1,2,1],[2,3,2],[2,3,4],[1,2,3],[1,3,2]])
>>> b2 = np.array([[0,4,0],[1,4,3],[1,4,5],[0,3,4],[0,4,3]])
>>> abs(a2-b2) <= 1
array([[ True, False,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]], dtype=bool)
>>> (abs(a2-b2) <= 1).all()
False

相关问题 更多 >