Python 两个numpy数组中元素之间的最小绝对差
考虑两个1d numpy阵列Python 两个numpy数组中元素之间的最小绝对差,python,arrays,numpy,Python,Arrays,Numpy,考虑两个1d numpy阵列 import numpy as np X = np.array([-43, 21, 4, 6, -1, 22, 8]) Y = np.array([13, 5, -12, 0]) 我想从X中找到与Y中的值具有最小绝对差值的值。在所示示例中,最小绝对差值为1,由[[4,5],[6,5],-1,0]给出。这个网站上有很多关于寻找数组的最小元素的资源,但这不是我想要的 对于目前的问题,两个起始阵列都是1d,尽管它们的大小可能不同。不过,我也对如何在起始阵列具有不同形状
import numpy as np
X = np.array([-43, 21, 4, 6, -1, 22, 8])
Y = np.array([13, 5, -12, 0])
我想从X
中找到与Y
中的值具有最小绝对差值的值。在所示示例中,最小绝对差值为1,由[[4,5],[6,5],-1,0]
给出。这个网站上有很多关于寻找数组的最小元素的资源,但这不是我想要的
对于目前的问题,两个起始阵列都是1d,尽管它们的大小可能不同。不过,我也对如何在起始阵列具有不同形状时继续操作的技巧感兴趣。这仅仅是一个将两者都展平然后像以前一样继续的问题吗?您可以计算绝对距离数组,然后在该数组中找到最小值。此方法适用于不同的
X
和Y
长度。如果它们是多维的,只需首先展平它们(使用X.flatte()
,…),然后将此解决方案应用于展平阵列:
如果要所有具有最小绝对距离的线对:
#absolute distance between X and Y
dist = np.abs(X[:,None]-Y)
#elements of X with minimum absolute distance
X[np.where(dist==dist.min())[0]]
#corresponding elements of Y with absolute distance
Y[np.where(dist==dist.min())[1]]
输出:
[ 4 6 -1]
[5 5 0]
4
5
您希望它们采用单一数组格式:
idx = np.where(dist==dist.min())
np.stack((X[idx[0]], Y[idx[1]])).T
[[ 4 5]
[ 6 5]
[-1 0]]
如果希望第一次出现的最小绝对距离具有更快的解决方案:
X[dist.argmin()//Y.size]
Y[dist.argmin()//X.size]
或者另一种解决方案(我认为会更快):
输出:
[ 4 6 -1]
[5 5 0]
4
5
注意:获取绝对距离数组的另一种方法是:
dist = np.abs(np.subtract.outer(X,Y))
您可能也想在示例中包括
[-1,0]
。我非常喜欢X[dist.argmin()//Y.size]解决方案-它超级高效且快速。@user109387如果您只需要第一次出现,我只添加了一个我认为更快的解决方案(如果您需要这对解决方案。否则,前一个解决方案的性能应该差不多)。如果性能对您很重要,请查看。非常感谢。