Метод Numpy для создания массива соседних треугольников из списка соседейPython

Программы на Python
Ответить
Anonymous
 Метод Numpy для создания массива соседних треугольников из списка соседей

Сообщение Anonymous »

Мне нужно вычислить вершины Вороного для N движущихся точек. Поскольку N>>1, я буду использовать scipy.spatial.Delaunay только на первом временном шаге и выполнять обновление связи (эквиангуляцию) на других временных шагах. Вот проблема (проиллюстрирована только для 3 точек).
В некоторый момент времени t в моей симуляции у меня есть
соседи 0: 12, 2, 39, 40 (4)
соседи 1: 56, 2, 9, 10 (4)
соседи 2: 0, 1, 5, 21, 19 (5)
Я хотел бы построить массив симплексов размером (4+4+5) x 3, как[[0, 12, 2],
[0, 2, 39],
[0, 39, 40],
[0, 40, 12],
[1, 56, 2],
[1, 2, 9] ,
[1, 9, 10],
[1, 10, 56],
[2, 0, 1],
[2, 1, 5],
[2, 5, 21],
[2, 21, 19],
[2, 19, 0]]
Мой подход на данный момент:

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

numnbrs = np.array([4,4,5])

nbrs = array([12,  2, 39, 40,  56,  2,  9, 10,  0,  1,  5, 21, 19])

idx = np.cumsum(num_nbrs)

nbrs_splitted = np.split(nbrs, idx[0:len(idx)-1])
дает три подмассива соседей

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

[array([12,  2, 39, 40]), array([56,  2,  9, 10]), array([ 0,  1,  5, 21, 19])]

matrix = np.array(list(itertools.zip_longest(*nbrs_splitted))).T

final = sliding_window_view(matrix, 2, axis=1)
дает

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

array([[[np.int64(12), np.int64(2)],
[np.int64(2), np.int64(39)],
[np.int64(39), np.int64(40)],
[np.int64(40), None]],

[[np.int64(56), np.int64(2)],
[np.int64(2), np.int64(9)],
[np.int64(9), np.int64(10)],
[np.int64(10), None]],

[[np.int64(0), np.int64(1)],
[np.int64(1), np.int64(5)],
[np.int64(5), np.int64(21)],
[np.int64(21), np.int64(19)]]], dtype=object)
Буду очень признателен за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/793 ... f-neighbor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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