Несколько массивов 2D numpy в 1 массиве

Я работаю над своим обратным распространением для базовой нейронной сети, и для каждого примера я должен вычислить новые веса. Я сохраняю свои веса в двумерном массиве numpy под названием weights, который выглядит так:

 [[0.09719335 0.03077288 0.84256845 0.78993436]
 [0.87452232 0.9833483  0.803617   0.46675746]
 [0.77805488 0.11567956 0.63747511 0.14045771]]

Для новых весов мне нужно среднее значение каждого веса между парой нейронов. Моя идея заключалась в том, чтобы вычислить его для всех элементов данных в моем обучающем наборе, а затем вычислить среднее значение. Для этого я хотел создать массив нулей с np.zeros, с размером верхнего массива, умноженным на количество элементов данных, которые у меня есть в моем наборе. Я пробовал вот так

newWeights = np.zeros((2,(weights.shape)))

Но это не сработало. есть ли способ инициализировать такой массив или есть другой способ сделать это проще (Я думал о np.append, но не мог этого понять)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
23
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

weights.shape - это кортеж, поэтому вы не можете включать его как есть, поскольку размеры должны быть целыми числами. Вы можете использовать * для распаковки кортежа:

newWeights = np.zeros((2, *weights.shape))

По сути, это распаковывает weights.shape, поэтому его размеры эквивалентны (2, x, y).

Вы можете сделать это так

import numpy as np
arr = np.array( [[0.09719335, 0.03077288, 0.84256845, 0.78993436],
 [0.87452232, 0.9833483,  0.803617,   0.46675746],
 [0.77805488, 0.11567956, 0.63747511, 0.14045771]])

arr3D = np.zeros((2,*arr.shape))

Затем вы сохраняете один 2D-массив в 3D-массиве следующим образом:

arr3D[0,:,:] = arr

Расчет среднего массива работает следующим образом:

mean_arr = arr3D.mean(axis=0)

Предполагая, что вы в порядке с изменением вашего массива weights на месте, np.ndarray.resize изменит размер вашего массива до (2, 3, 4) и заполнит новые значения 0:

import numpy as np

weights = np.asarray([[0.09719335, 0.03077288, 0.84256845, 0.78993436], [0.87452232, 0.9833483, 0.803617, 0.46675746],
                [0.77805488, 0.11567956, 0.63747511, 0.14045771]])
print(weights.shape) # (3, 4)

weights.resize((2, *weights.shape), refcheck=False)
print(weights.shape) # (2, 3, 4)
[[[0.09719335 0.03077288 0.84256845 0.78993436]
  [0.87452232 0.9833483  0.803617   0.46675746]
  [0.77805488 0.11567956 0.63747511 0.14045771]]

 [[0.         0.         0.         0.        ]
  [0.         0.         0.         0.        ]
  [0.         0.         0.         0.        ]]]

Другие вопросы по теме