Как изменить каждый элемент в массиве на среднее значение массива, используя NumPy? - PullRequest
1 голос
/ 23 сентября 2019

Я новичок в Python.В одном из моих вопросов о назначении часть вопроса требует, чтобы мы вычислили среднее значение каждого элемента в подматрице и заменили каждый элемент на среднее значение, используя операторы, доступные в Numpy.

Пример матрицыможет быть

M = [[[1,2,3],[2,3,4]],[[3,4,5],[4,5,6]]]

Ожидается, что через некоторые операции получится матрица, подобная следующей:

M = [[[2,2,2],[3,3,3]],[[4,4,4],[5,5,5]]]

Я посмотрел на некоторые обалденные документы и до сих пор не понял,был бы очень признателен, если кто-то может помочь.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

У вас есть несколько вариантов здесь.Все они придерживаются одной и той же общей идеи.У вас есть массив 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
Трансляция умножения, большеДля демонстрации, чем что-либо

0 голосов
/ 23 сентября 2019

В одной строке кода:

M.mean(-1, keepdims=1) * np.ones(M.shape)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...