способ создания 3d матрицы из 2 векторов и 1 матрицы - PullRequest
0 голосов
/ 30 марта 2020

Здравствуйте, у меня есть вопрос относительно проблемы, с которой я сталкиваюсь в python. Я изучал тензоры и увидел, что каждая строка / столбец тензора должна иметь одинаковый размер. Можно ли создать тензор из, возможно, трехмерного объекта или матрицы, где, скажем, у нас есть 3 оси: x, y, z По оси x я хочу создать вектор, который будет работать как индекс. Итак, пусть x будет от 0 до N. Тогда на оси y я хочу иметь N случайных целочисленных векторов размером m (где mm Возможно ли это? Мой первый подход состоял в том, чтобы создать большой вектор из Nm и большую матрицу из (N *) 1001 * m, N m) измерения, где я буду хранить все свои случайные векторы и матрицы, а затем, если я захочу изменить, например, мой второй вектор, мне придется играть с индексами. Однако есть еще один способ подойти к этой проблеме с тензорами или numpy, о которых я не знаю? Заранее спасибо за советы

1 Ответ

0 голосов
/ 30 марта 2020

Первый вектор, N = 3, [1,2, 3] Вторые N векторов длиной m, m = 2 [[4,5], [6,7], [7,8]]

Итак, N матриц размера (m, m) [[[1,1], [2,2]], [[1,1], [2,2]], [[1,1], [2,2]] ]

Позволяет создавать из них numpy массивов.

import numpy as np
N = 3
m = 2
a = np.array([1,2,3])
b = np.random.randn(N, m)
c = np.random.randn(N, m, m)

Вы видите проблему здесь? Последняя матрица c уже имеет 3 измерения в соответствии с вашими определениями.

Ваш аргумент может быть упрощен.

Допустим, наша окончательная матрица - a = np.zeros((3,2,2)) # 3 измерения, x, y , z 1) Для первого измерения -

a[0,:,:] = 0 # первая ось, первый индекс = 0

a[1,:,:] = 1 # первая ось, 2-й индекс = 1

a[2,:,:] = 2 # первая ось, 3-й индекс = 2

2) Теперь нам нужно заполнить остальные позиции, но размеры не совпадают.

Итак, лучше создать отдельные тензоры для них.

...