У вас есть несколько вариантов здесь.Все они придерживаются одной и той же общей идеи.У вас есть массив MxNxL, и вы хотите применить операцию сокращения вдоль последней оси, которая по умолчанию предоставит вам результат MxN.Однако вы хотите транслировать этот результат по той же форме MxNxL, с которой вы начали.
В большинстве операций сокращения Numpy имеет параметр, который позволяет сохранить уменьшенный размер в выходном массиве, что позволит вамлегко транслировать этот результат в матрицу правильного размера.Параметр называется keepdims
, вы можете прочитать больше в документации к numpy.mean
.
Вот несколько подходов, которые все используют это преимущество.
Настройка
avg = M.mean(-1, keepdims=1)
# array([[[2.],
# [3.]],
#
# [[4.],
# [5.]]])
Опция 1
Назначить вид массива.Однако это также приведет к тому, что средние числа с плавающей запятой будут равны int
, поэтому, если вы хотите это сделать, приведите ваш массив к плавающему первому для точности.
M[:] = avg
Вариант 2
Эффективное представление только для чтения с использованием np.broadcast_to
np.broadcast_to(avg, M.shape)
Опция 3
Трансляция умножения, большеДля демонстрации, чем что-либо