Python 行的最快成对差
我有一个n×3的numpy数组,每一行代表三维空间中的一个向量 我想要一个三维n×n×3数组,向量为[I,j],表示向量I和j的每个分量之间的差异Python 行的最快成对差,python,numpy,Python,Numpy,我有一个n×3的numpy数组,每一行代表三维空间中的一个向量 我想要一个三维n×n×3数组,向量为[I,j],表示向量I和j的每个分量之间的差异 >>> x = np.random.randint(10, size=(4, 3)) >>> x array([[4, 0, 8], [8, 5, 3], [4, 1, 6], [2, 2, 4]]) >>> x[:, np.newaxis] - x ar
>>> x = np.random.randint(10, size=(4, 3))
>>> x
array([[4, 0, 8],
[8, 5, 3],
[4, 1, 6],
[2, 2, 4]])
>>> x[:, np.newaxis] - x
array([[[ 0, 0, 0],
[-4, -5, 5],
[ 0, -1, 2],
[ 2, -2, 4]],
[[ 4, 5, -5],
[ 0, 0, 0],
[ 4, 4, -3],
[ 6, 3, -1]],
[[ 0, 1, -2],
[-4, -4, 3],
[ 0, 0, 0],
[ 2, -1, 2]],
[[-2, 2, -4],
[-6, -3, 1],
[-2, 1, -2],
[ 0, 0, 0]]])
这是可行的,但是是我程序中最慢的一行…甚至比我的欧几里德距离码还要慢(它利用了点积和einsum
…)
有什么聪明的矩阵数学方法可以更有效地完成我想要的任务吗?与一年多前的情况类似。
n
的典型值是什么?我不明白为什么这会特别慢,除了这样一个事实:NX3阵列的结果可能很大,并且会扩展机器的内存容量。它必须执行n*n*3减法运算,但它应该在C代码中执行这些运算。@WarrenWeckesser在我的用例中,一个典型的n大约是500。@hpaulj也许它不是绝对慢,但与我正在做的其他事情相比,它相对慢。也许我只是反应过度了……与一年多前的情况类似。n
的典型值是多少?我不明白为什么这会特别慢,除了这样一个事实:ing NX3阵列可能会很大,并且会扩展机器的内存容量。它必须执行n*n*3减法运算,但它应该在C代码中执行这些运算。@WarrenWeckesser在我的用例中,一个典型的n大约是500。@hpaulj也许它不是绝对慢,但与我正在做的其他事情相比,它相对慢。也许我只是反应过度了。。。