gpt4 book ai didi

python - 检查 2D NumPy 数组的坐标是否在特定范围内的优雅方法

转载 作者:行者123 更新时间:2023-12-01 01:08:58 27 4
gpt4 key购买 nike

假设我们有一个 2D NumPy 数组(表示坐标),我想检查所有坐标是否都在某个范围内。最Pythonic的方法是什么?例如:

a = np.array([[-1,2], [1,5], [6,7], [5,2], [3,4], [0, 0], [-1,-1]])

#ALL THE COORDINATES WITHIN x-> 0 to 4 AND y-> 0 to 4 SHOULD
BE PUT IN b (x and y ranges might not be equal)

b = #DO SOME OPERATION
>>> b
>>> [[3,4],
[0,0]]

最佳答案

如果 x 和 y 两个方向的范围相同,则只需比较它们并使用 all:

import numpy as np

a = np.array([[-1,2], [1,5], [6,7], [5,2], [3,4], [0, 0], [-1,-1]])
a[(a >= 0).all(axis=1) & (a <= 4).all(axis=1)]
# array([[3, 4],
# [0, 0]])

如果范围不同,您还可以与与该轴大小相同的可迭代对象进行比较(这里有两个):

mins = 0, 1   # x_min, y_min
maxs = 4, 10 # x_max, y_max

a[(a >= mins).all(axis=1) & (a <= maxs).all(axis=1)]
# array([[1, 5],
# [3, 4]])
<小时/>

要了解这里发生的情况,让我们看一下中间步骤:

比较给出了每个元素的比较结果,其形状与原始数组相同:

a >= mins
# array([[False, True],
# [ True, True],
# [ True, True],
# [ True, True],
# [ True, True],
# [ True, False],
# [False, False]], dtype=bool)

使用nmpy.ndarray.all,您可以得到所有值是否为真,类似于内置函数all:

(a >= mins).all()
# False

使用 axis 参数,您可以将其限制为仅比较沿数组的一个(或多个)轴的值:

(a >= mins).all(axis=1)
# array([False, True, True, True, True, False, False], dtype=bool)
(a >= mins).all(axis=0)
# array([False, False], dtype=bool)

请注意,它的输出与数组的形状相同,只是 axis 提到的所有维度都已收缩为单个 True/False.

当使用一系列 True, False 值对数组进行索引时,如果可能,它会被转换为正确的形状。由于我们使用 (7,) = (7, 1) 索引对形状为 (7, 2) 的数组进行索引,因此这些值会沿着第二个维度隐式重复,因此这些值用于选择原始数组的行。

关于python - 检查 2D NumPy 数组的坐标是否在特定范围内的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55041810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com