平均numpy阵列但保持形状

AJP*_*AJP 8 python numpy average shape multidimensional-array

我有一个Numpy 3轴阵列,其元素是3维的.我想平均它们并返回相同形状的数组.正常平均函数删除3个维度并将其替换为平均值(如预期的那样):

a = np.array([[[0.1, 0.2, 0.3], [0.2, 0.3, 0.4]],
              [[0.4, 0.4, 0.4], [0.7, 0.6, 0.8]]], np.float32)

b = np.average(a, axis=2)
# b = [[0.2, 0.3],
#      [0.4, 0.7]]
Run Code Online (Sandbox Code Playgroud)

结果要求:

# b = [[[0.2, 0.2, 0.2], [0.3, 0.3, 0.3]],
#      [[0.4, 0.4, 0.4], [0.7, 0.7, 0.7]]]
Run Code Online (Sandbox Code Playgroud)

你能优雅地做到这一点,还是只需要在Python中迭代数组(与强大的Numpy函数相比,它会慢得多).

你能否为np.mean函数将Dtype参数设置为1D数组?

谢谢.

use*_*424 6

好的,小心我还没有我的主人,但只是玩,我想出来:

>>> np.average(a,axis=-1).repeat(a.shape[-1]).reshape(a.shape)
array([[[ 0.2       ,  0.2       ,  0.2       ],
        [ 0.29999998,  0.29999998,  0.29999998]],

       [[ 0.40000001,  0.40000001,  0.40000001],
        [ 0.69999999,  0.69999999,  0.69999999]]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)


Bi *_*ico 5

你考虑过使用广播吗?如果您对这个概念不熟悉,可以参考以下有关广播的更多信息.

这是一个使用的示例broadcast_arrays,请记住,b此处生成的broadcast_arrays应该被视为只读,如果要写入它,您应该复制一个:

>>> b = np.average(a, axis=2)[:, :, np.newaxis]
>>> b, _ = np.broadcast_arrays(b, a)
>>> b
array([[[ 0.2       ,  0.2       ,  0.2       ],
        [ 0.29999998,  0.29999998,  0.29999998]],

       [[ 0.40000001,  0.40000001,  0.40000001],
        [ 0.69999999,  0.69999999,  0.69999999]]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)


bos*_*ter 3

>>> import numpy as np
>>> a = np.array([[[0.1, 0.2, 0.3], [0.2, 0.3, 0.4]],
...               [[0.4, 0.4, 0.4], [0.7, 0.6, 0.8]]], np.float32)
>>> b = np.average(a, axis=2)
>>> b
array([[ 0.2       ,  0.29999998],
       [ 0.40000001,  0.69999999]], dtype=float32)
>>> c = np.dstack((b, b, b))
>>> c
array([[[ 0.2       ,  0.2       ,  0.2       ],
        [ 0.29999998,  0.29999998,  0.29999998]],

       [[ 0.40000001,  0.40000001,  0.40000001],
        [ 0.69999999,  0.69999999,  0.69999999]]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)