我有一个x坐标的numpy数组,想要生成一个数组,该数组显示每个坐标与其他每个坐标之间的距离,即第一行是从每个坐标到第一坐标的距离,第二行是从每个坐标到第二个等。
我当前正在使用两个for循环:
for i in range(len(x_coordinates)):
for j in range(len(x_coordinates)):
x_relative[i][j] = x_coordinates[j] - x_coordinates[i]
但是有没有迭代的方法吗?有很多座标,所以希望能得到优化。
答案 0 :(得分:0)
也许使用np.subtract,这样您就可以有一个循环而不是两个循环,因此是O(n)而不是O(n ^ 2):
`import numpy as np
x = [1,2,3,4,5,6,7,8,9] #your coordinates
y = np.array([np.subtract(x,i) for i in x])`
这导致
`>>> y
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[-1, 0, 1, 2, 3, 4, 5, 6, 7],
[-2, -1, 0, 1, 2, 3, 4, 5, 6],
[-3, -2, -1, 0, 1, 2, 3, 4, 5],
[-4, -3, -2, -1, 0, 1, 2, 3, 4],
[-5, -4, -3, -2, -1, 0, 1, 2, 3],
[-6, -5, -4, -3, -2, -1, 0, 1, 2],
[-7, -6, -5, -4, -3, -2, -1, 0, 1],
[-8, -7, -6, -5, -4, -3, -2, -1, 0]])`
答案 1 :(得分:0)
您需要outer
,但要减去。大多数ufunc都内置有外部方法:
x = [1,2,3,4,5,6,7,8,9] #your coordinates
np.subtract.outer(x,x)
array([[ 0, -1, -2, -3, -4, -5, -6, -7, -8],
[ 1, 0, -1, -2, -3, -4, -5, -6, -7],
[ 2, 1, 0, -1, -2, -3, -4, -5, -6],
[ 3, 2, 1, 0, -1, -2, -3, -4, -5],
[ 4, 3, 2, 1, 0, -1, -2, -3, -4],
[ 5, 4, 3, 2, 1, 0, -1, -2, -3],
[ 6, 5, 4, 3, 2, 1, 0, -1, -2],
[ 7, 6, 5, 4, 3, 2, 1, 0, -1],
[ 8, 7, 6, 5, 4, 3, 2, 1, 0]])