是否有任何快速蛮力查找的 numpy 方法?
Is there any numpy-method of brute-force finding fast?
假设我有 n x 64 数组和 m x 64 数组。我想找到以下结果的最佳 n 对:
list_best=[]
for nn in range(n):
ele_n = nx64_array[nn,:]
ele_best = np.ones_like(ele_n)
for mm in range(m):
ele_m = mx64_array[mm,:]
diff = np.sum(np.abs(ele_n - ele_m))
if diff<ele_best : ele_best = ele_m
list_best.append(ele_best)
但我想知道的是,有任何类似于 numpy 的方法可以实现这一点,因为 for 循环非常慢。
有什么方法可以更快地做到这一点?非常感谢。
您可以尝试以下方法。它产生一个形状为 n x 64 的数组。该数组的每一行都是 mx64
的行,它最接近具有相同索引的数组 nx64
的行:
import numpy as np
m = 10
n = 20
nx64 = np.random.rand(n, 64)
mx64 = np.random.rand(m, 64)
mx64[np.argmin(np.abs(nx64[:, None, :] - mx64[None, :, :]).sum(axis=-1), axis=1)]
假设我有 n x 64 数组和 m x 64 数组。我想找到以下结果的最佳 n 对:
list_best=[]
for nn in range(n):
ele_n = nx64_array[nn,:]
ele_best = np.ones_like(ele_n)
for mm in range(m):
ele_m = mx64_array[mm,:]
diff = np.sum(np.abs(ele_n - ele_m))
if diff<ele_best : ele_best = ele_m
list_best.append(ele_best)
但我想知道的是,有任何类似于 numpy 的方法可以实现这一点,因为 for 循环非常慢。
有什么方法可以更快地做到这一点?非常感谢。
您可以尝试以下方法。它产生一个形状为 n x 64 的数组。该数组的每一行都是 mx64
的行,它最接近具有相同索引的数组 nx64
的行:
import numpy as np
m = 10
n = 20
nx64 = np.random.rand(n, 64)
mx64 = np.random.rand(m, 64)
mx64[np.argmin(np.abs(nx64[:, None, :] - mx64[None, :, :]).sum(axis=-1), axis=1)]