Простым примером может быть
Код: Выделить всё
import numpy as np
N = 9
x = np.linspace(0,1,N)
y = np.abs(x - x[:,None]) # pairwise 1d eucdlidian distance
Однако нижний (или верхний) треугольник y можно отбросить, поскольку расстояние от x[0] до x[1] — это то же самое, что расстояние от x[1] до x[0].
Может ли кто-нибудь придумать способ никогда не вычислять меньшее ( или верхний) треугольник на первом месте? В идеале это можно было бы обобщить на массивы Nd, например
Код: Выделить всё
x = np.linspace(0,1,N)
y = x + (1j * x)[:,None] # complex plane
z = np.abs(y[:,:,None,None] - y[None,None,:,:]) # pairwise 2d euclidian distance
Код: Выделить всё
y = np.random.randint(0,2,(N,N))
z = y[:,:,None,None] == y[None,None,:,:] # pairwise equality
PS: Для всех, кому интересно, это возникло, когда я пытался реализовать функцию энергии для 2D-моделирования отжига.
Подробнее здесь: https://stackoverflow.com/questions/787 ... s-in-numpy