Объединение двух двумерных массивов в один двумерный массив из двух кортежей - PullRequest
8 голосов
/ 02 февраля 2011

У меня есть два таких двумерных массива, представляющих x / y расстояния между тремя точками.Мне нужны x / y расстояния как кортежи в одном массиве.

Итак, от:

x_dists = array([[ 0, -1, -2],
                 [ 1,  0, -1],
                 [ 2,  1,  0]])

y_dists = array([[ 0, -1, -2],
                 [ 1,  0, -1],
                 [ 2,  1,  0]])

Мне нужно:

dists = array([[[ 0,  0], [-1, -1], [-2, -2]],
               [[ 1,  1], [ 0,  0], [-1, -1]],
               [[ 2,  2], [ 1,  1], [ 0,  0]]])

Я пробовал использовать различныеперестановки dstack / hstack / vstack / concatenate, но ни одна из них, кажется, не делает то, что я хочу.Фактические массивы в коде могут быть гигантскими, поэтому перебор элементов в python и перестановка «вручную» не являются быстродействующим вариантом.

Редактировать: Эточто я придумал в итоге: https://gist.github.com/807656

Ответы [ 2 ]

10 голосов
/ 02 февраля 2011
import numpy as np
dists = np.vstack(([x_dists.T], [y_dists.T])).T

возвращает dists, как вы хотели их.После этого это не «один двумерный массив из двух кортежей», а обычный трехмерный массив, где третья ось является объединением двух исходных массивов.

Вы видите:

dists.shape # (3, 3, 2)
7 голосов
/ 02 февраля 2011
numpy.rec.fromarrays([x_dists, y_dists], names='x,y')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...