给定形状为(n,d)的数组A。 n是点(或向量)的数量,d是每个点的维数。
我想从A中选择两个最小和最大向量之间的点。最小和最大尺寸为d。最小值和最大值对于每个维度都有最小值和最大值。
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)
返回一个布尔数组,其中所有
True
是索引,其中A[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/