Вы можете получить попарные расстояния через broadcasting, рассматривая его в качестве внешней операции на массиве 2 мерные векторы следующим образом:
vecs = np.stack((x, y)).T
np.linalg.norm(vecs[np.newaxis, :] - vecs[:, np.newaxis], axis=2)
Например,
In [1]: import numpy as np
...: x = np.array([1, 2, 3])
...: y = np.array([3, 4, 6])
...: vecs = np.stack((x, y)).T
...: np.linalg.norm(vecs[np.newaxis, :] - vecs[:, np.newaxis], axis=2)
...:
Out[1]:
array([[ 0. , 1.41421356, 3.60555128],
[ 1.41421356, 0. , 2.23606798],
[ 3.60555128, 2.23606798, 0. ]])
Здесь (я, J) -м запись расстояние между я -м и J -м векторов.
Случай попарных различий между углами аналогично, но проще, так как у вас есть только одно измерение, чтобы иметь дело с:
In [2]: a = np.array([10, 12, 15])
...: a[np.newaxis, :] - a[: , np.newaxis]
...:
Out[2]:
array([[ 0, 2, 5],
[-2, 0, 3],
[-5, -3, 0]])
Кроме того, plt.scatter
не заботится о том, что результаты представлены в виде матриц, и положить все вместе, используя обозначения этого вопроса, вы можете получить график углов на расстояния, делая что-то вроде
vecs = np.stack((x, y)).T
f = np.linalg.norm(vecs[np.newaxis, :] - vecs[:, np.newaxis], axis=2)
d = angle[np.newaxis, :] - angle[: , np.newaxis]
plt.scatter(f, d)
Итак, если я правильно понимаю, вы хотите способ рассчитать 255x255 различные возможности для вычисления расстояния/углы между каждая точка (может быть, за исключением самой фактической точки)? – Alex
Да! Но есть (255x255)/2 различных возможностей. – larry
Да, вы правы ... – Alex