Оценить изменение тензора T [a1, a2, a3] на матрицу M [a2, a1 * a3] в питоне - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь преобразовать тензор M [a1, a2, a3] с размерами d1, d2, d3 в матрицу M [a2, a1 * a3] размерности d2, d1 * d3. Я пробовал с

M.reshape(d2,d1*d3)

но результат не тот, каким он должен быть. Чтобы привести простой пример:

    >>> M = np.array([[['a','b'],['c','d']],[['e','f'],['g','h']],[['i','j'],['k','l']]])
    ... array([[['a', 'b'],
     ['c', 'd']],

    [['e', 'f'],
     ['g', 'h']],

    [['i', 'j'],
     ['l', 'k']]], dtype='<U1')

    >>> M.reshape(2,3*2)
    ... array([['a', 'b', 'c', 'd', 'e', 'f'],
                 ['g', 'h', 'i', 'j', 'l', 'k']], dtype='<U1')

Есть ли способ определить, какие оси он должен «умножить»? (Или другая функция, которая делает это) Я использую это в контексте состояний продукта матрицы.

Спасибо!

EDIT: После получения ответа я мог бы задать свой вопрос:

Учитывая массив измерения d1 x d2 x d3, как мне объединить несмежные индексы с reshape () и поддержкой зависимостей. То есть изменение тензора 3x2x2 в матрицу 2x6 таким образом, чтобы строки соответствовали второму (или третьему) индексу. Как видно из примера, простой .reshape (2,6) не дает ни того, ни другого.

1 Ответ

0 голосов
/ 31 октября 2018

Я думаю, что вам нужно сначала изменить порядок осей, а затем изменить форму:

import numpy as np

M = np.array([[['a','b'],['c','d']],[['e','f'],['g','h']],[['i','j'],['k','l']]])
M = M.transpose((1, 0, 2)).reshape((M.shape[1], -1))
print(M)

Выход:

[['a' 'b' 'e' 'f' 'i' 'j']
 ['c' 'd' 'g' 'h' 'k' 'l']]
...