Создание 2D матрицы векторов из массива nd - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть матрица, представленная массивом np. Вот пример того, о чем я говорю. Вы можете видеть, что внутри него есть 3 "вектора"

x = np.array([[1, 1], [1,2],[2,3]])

[1, 1], [1,2] и [2,3]

Цель состоит в том, чтобы превратить это в матрицу, где эти векторы повторяются Таким образом, 0-я строка указанной матрицы должна просто повторяться [1,1] n раз. И 1-й ряд должен быть [1,2] повторен n раз. Я полагаю, что это будет выглядеть примерно так: n = 4

xresult = np.array([[[1, 1], [1, 1], [1, 1], [1, 1]],
              [[1, 2], [1, 2], [1, 2], [1, 2]], 
              [[2, 3], [2, 3], [2, 3], [2, 3]]])

И, следовательно,

xresult[0,0] = [1,1]
xresult[0,1] = [1,1]
xresult[0,2] = [1,1]
xresult[1,2] = [1,2]

Цель, конечно, в том, чтобы сделать это без циклов, если это возможно, поскольку это очевидно, но, возможно, менее элегантное / производительное решение.

Вот некоторые попытки, которые не работают

np.tile([x],(2,1))
>>>array([[[1, 1],
        [1, 2],
        [2, 3],
        [1, 1],
        [1, 2],
        [2, 3]]])
np.tile([x],(2,))
>>>array([[[1, 1, 1, 1],
        [1, 2, 1, 2],
        [2, 3, 2, 3]]])
np.append(x,x,axis=0)
>>>array([[1, 1],
       [1, 2],
       [2, 3],
       [1, 1],
       [1, 2],
       [2, 3]])
np.append([x],[x],axis=1)
>>>array([[[1, 1],
        [1, 2],
        [2, 3],
        [1, 1],
        [1, 2],
        [2, 3]]])
np.array([[x],[x]])
>>>array([[[[1, 1],
         [1, 2],
         [2, 3]]],


       [[[1, 1],
         [1, 2],
         [2, 3]]]])

(Некоторые из них были просто с n = 2 в качестве цели)

Стоит отметить , что конечная цель состоит в том, чтобы взять x и y (аналогично созданный массив векторов одинакового размера, но не обязательно одинакового числа векторов

y = np.array([[99,11], [23,44],[33,44], [2, 1], [9, 9]])

И запустите процедуру для x, чтобы столбцы результата представляли собой число векторов в y. И запустите процедуру для y, которая аналогична, но делает это по строкам.

y после этого преобразования будет иметь следующий

yresult[0,0] = [99,11]
yresult[1,0] = [22,44]
yresult[2,0] = [33,44]
yresult[2,1] = [33,44]

Таким образом, я могу вычесть две матрицы. Цель состоит в том, чтобы создать матрицу, где индекс xvector является строкой, индекс yvector является строкой, а элемент является Разница между этими двумя векторами.

ultimateResult[0,1]=[1,1]-[23,44]=[-22,-43]

Возможно, есть лучший способ получить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...