Как эффективно вычислять парные количества в numpy?Python

Программы на Python
Anonymous
Как эффективно вычислять парные количества в numpy?

Сообщение Anonymous »

Я хочу вычислить парные величины, например расстояния между двумя точками.
Простым примером может быть

Код: Выделить всё

import numpy as np

N = 9
x = np.linspace(0,1,N)
y = np.abs(x - x[:,None]) # pairwise 1d eucdlidian distance
В результате будет создан массив (N,N), который содержит расстояния от каждого элемента x до каждого другого элемента x .
Однако нижний (или верхний) треугольник 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

Вернуться в «Python»