如何使用NumPy将数组中的每个元素更改为数组的平均值?

如何使用NumPy将数组中的每个元素更改为数组的平均值?,numpy,Numpy,我是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]]] 我看过一些numpy文档,但还没有弄明白,如果有人能帮我,我将不胜感激。这里有一些不同的选择。它们都遵循相同的总体思路。您有一个

我是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]]]

我看过一些numpy文档,但还没有弄明白,如果有人能帮我,我将不胜感激。

这里有一些不同的选择。它们都遵循相同的总体思路。您有一个MxNxL阵列,并且希望沿最后一个轴应用缩减操作,默认情况下,这将为您留下一个MxN结果。但是,您希望在开始使用的相同MxNxL形状上广播该结果

Numpy在大多数缩减操作中都有一个参数,允许您将缩减的维度保留在输出数组中,这将允许您轻松地将结果广播到正确大小的矩阵中。该参数名为
keepdims
,您可以阅读文档中的更多内容

这里有一些方法都利用了这一点

设置


选项1
指定给阵列的视图。但是,它也会强制浮点平均值为
int
,因此,如果您想这样做,请先将数组转换为浮点以获得精度

M[:] = avg

选项2
使用
np.broadcast\u to

np.broadcast_to(avg, M.shape)

选项3
广播乘法,更多的是为了演示

avg * np.ones(M.shape)

所有将产生(除了可能的
dtype
)相同):


在一行代码中:

M.mean(-1, keepdims=1) * np.ones(M.shape)

这只是我上一个选项的复制粘贴。对不起,我没有注意到
array([[[2., 2., 2.],
        [3., 3., 3.]],

       [[4., 4., 4.],
        [5., 5., 5.]]])
M.mean(-1, keepdims=1) * np.ones(M.shape)