我是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文档,但仍然没有弄清楚,如果有人可以提供帮助,我将不胜感激。
答案 0 :(得分:1)
您在这里有几个不同的选择。它们都遵循相同的总体思想。您有一个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
广播乘法,更多用于演示。
avg * np.ones(M.shape)
所有都会产生(除了dtype
以外,其他都一样):
array([[[2., 2., 2.],
[3., 3., 3.]],
[[4., 4., 4.],
[5., 5., 5.]]])
答案 1 :(得分:0)
在一行代码中:
M.mean(-1, keepdims=1) * np.ones(M.shape)