gpt4 book ai didi

python - 如何从 numpy 数组中选择两个边界之间的点?

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

给定一个形状为 (n,d) 的数组 A。 n 是点(或向量)的数量,d 是每个点的维度。

我想从 A 中选择两个向量最小值和最大值之间的点。最小值和最大值的维度为 d。 mins 和 maxes 具有每个维度的最小值和最大值。

A=array([[ 4,  3, 12,  7],
[ 3, 2, 10, 5],
[ 6, 10, 14, 8],
[ 7, 11, 13, 14],
[10, 16, 20, 14],
[12, 19, 22, 16],
[ 7, 10, 25, 18]])
mins = np.array( [5,9,12,6])
maxes = np.array( [10,17,20,15] )

预期结果是:

[ 6, 10, 14,  8],

[ 7, 11, 13, 14],

[10, 16, 20, 14]

最佳答案

您可以通过以下行过滤这些内容:

x = np.logical_and((A >= mins).sum(axis=1) == len(mins), (A <= maxes).sum(axis=1) == len(mins))
result = A[x]

result :

array([[ 6, 10, 14,  8],
[ 7, 11, 13, 14],
[10, 16, 20, 14]])

编辑:上面可以简化为:

A[(A <= maxes).sum(axis=1) & (A >= mins).sum(axis=1) == len(mins)]

深入解释:

(A >= mins).sum(axis=1) == len(mins)

返回一个 bool 数组,其中所有 TrueA[index] 内每个数组元素的索引大于或等于 mins 中的每个元素数组:

array([False, False,  True,  True,  True,  True,  True], dtype=bool)

我们加入 (A <= maxes).sum(axis=1) == len(mins) ,代表所有小于 maxes 的元素, x结果是

array([False, False,  True,  True,  True, False, False], dtype=bool)

我们只需将其应用到 A

关于python - 如何从 numpy 数组中选择两个边界之间的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55246738/

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