Превратить тензор в другой - PullRequest
0 голосов
/ 27 января 2019

У меня есть список массивов

T = [np.array([[1, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]), np.array([[0, 0, 1], [0, 0, 1], [1, 0, 0], [0, 1,
 0]]), np.array([[0, 1, 0], [0, 0, 1], [0, 1, 0], [0, 0, 1]]), np.array([[1, 0, 0], [1, 0, 0], [0, 0, 1], [0, 1, 0]])]

, затем тензор, если

T = np.array(T)

Тогда форма этого тензора будет (5, 4, 3).Мне было бы интересно изменить этот тензор, чтобы получить (4, 5, 3).Другими словами, 4 матрицы размерности (5, 3).Первая матрица будет просто

 [[1, 0, 0],
  [1, 0, 0],
  [0, 0, 1],
  [0, 1, 0]
  [1, 0, 0]]

Вторая

 [[1, 0, 0],
  [0, 0, 1],
  [0, 0, 1],
  [0, 0, 1]
  [1, 0, 0]]

и т. Д.

Я пытался просто транспонировать тензор, но это мне не помогло.

Как мне изменить форму T, чтобы получить размер (4, 5, 3)?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Ручное решение, уродливее, но ..

С учетом входного массива: импортировать numpy как np

T = [np.array([[1, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]),
     np.array([[1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]),
     np.array([[0, 0, 1], [0, 0, 1], [1, 0, 0], [0, 1, 0]]),
     np.array([[0, 1, 0], [0, 0, 1], [0, 1, 0], [0, 0, 1]]),
     np.array([[1, 0, 0], [1, 0, 0], [0, 0, 1], [0, 1, 0]])]

T = np.array(T)

Чтобы получить «первый столбец», как он появляется в коде:

print(T[:,0])

# [[1 0 0]
#  [1 0 0]
#  [0 0 1]
#  [0 1 0]
#  [1 0 0]]

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

np.array( [ T[:,n] for n in range(len(T[0])) ] )
0 голосов
/ 27 января 2019

Используйте следующее

np.transpose(T, (1, 0, 2))

Второй параметр относится к положению осей тензора.Поскольку T имеет форму (5, 4, 3), что означает, что ось 0 равна 5, ось 1 равна 4, а ось 2 равна 3.

Итак,чтобы тензор имел форму (4, 5, 3), просто расположите его, используя np.transpose.

Альтернативный способ сделать это

T.transpose(1, 0, 2)

Дополнительные пояснения из документации

оси: список целых, необязательный

По умолчанию поменяйте местами размеры, в противном случае перестановите оси в соответствии с заданными значениями.

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