numpy数组中元素的顺序

阿比纳夫

我有一个shape(nx3)的二维数组,比如说arr1。现在考虑第二个数组arr2,其形状与arr1相同,并具有相同的行。但是,行的顺序不同。我想像在arr1中一样获取arr2中每一行的索引。我正在寻找最快的Python方式来完成此操作,因为n约为10,000。

例如:

arr1 = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = numpy.array([[4, 5, 6], [7, 8, 9], [1, 2, 3]])
ind = [1, 2, 0]

请注意,行元素不必为整数。实际上,它们是花车。我找到了使用numpy.searchsorted的相关答案,但它们仅适用于一维数组。

亨利

如果确保arr2是的排列arr1,则可以使用sort获取索引:

import numpy as np

n = 100000
a1 = np.random.randint(0, 100, size=(n, 3))
a2 = a1[np.random.permutation(np.arange(n))]
idx1 = np.lexsort(a1.T)
idx2 = np.lexsort(a2.T)
idx = idx2[np.argsort(idx1)]
np.all(a1 == a2[idx])

如果它们的值不完全相同,则可以在scipy中使用kdTree:

n = 100000

a1 = np.random.uniform(0, 100, size=(n, 3))
a2 = a1[np.random.permutation(np.arange(n))] + np.random.normal(0, 1e-8, size=(n, 3))
from scipy import spatial
tree = spatial.cKDTree(a2)
dist, idx = tree.query(a1)
np.allclose(a1, a2[idx])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章