Объедините два массива как пары координат - PullRequest
4 голосов
/ 03 августа 2020

У меня есть два массива numpy, которые мне нужно объединить в двухмерный массив: каждая строка должна быть парой координат. Например, если массивы numpy были:

[1 2 3]
[a b c]

, то я стремлюсь к:

[[1 a]
 [1 b]
 [1 c]
 [2 a]
 [2 b]
 [2 c]
 [3 a]
 [3 b]
 [3 c]]

Я пробовал это:

    import numpy as np

    x1_start, x1_stop, x1_step = 88.5, 91.5, 0.2
    x2_start, x2_stop, x2_step = 82, 90, 0.5

    x1 = np.arange(x1_start, x1_stop, x1_step)
    x2 = np.arange(x2_start, x2_stop, x2_step)

    x1x2 = np.array([])

    for k in range(len(x1)):
        for h in range(len(x2)):
            list = [x1[k], x2[h]]
            np.append(x1x2, list ,0)

, но результат - пустой массив numpy. В качестве альтернативы я пробовал это:

x1x2 = []

for k in range(len(x1)):
    for h in range(len(x2)):
        x1x2.append([x1[k],x2[h]])

print(type(x1x2))
np.asarray(x1x2)
print(type(x1x2))

список содержит правильные числа, но когда я печатаю его тип, он оказывается списком до и после приведения np.array.

1 Ответ

1 голос
/ 03 августа 2020

В одну сторону с meshgrid

x = np.array([1,2,3])
y = np.array([4,5,6])
np.array(np.meshgrid(x, y)).T.reshape(-1, 2)

приведет к объединению в пары всех возможных комбинаций

array([[1, 4],
       [1, 5],
       [1, 6],
       [2, 4],
       [2, 5],
       [2, 6],
       [3, 4],
       [3, 5],
       [3, 6]])

meshgrid, транспонируйте их вместе, а затем измените форму на то, что есть необходимо.

...