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数组?
谢谢.
好的,小心我还没有我的主人,但只是玩,我想出来:
>>> 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)
你考虑过使用广播吗?如果您对这个概念不熟悉,可以参考以下有关广播的更多信息.
这是一个使用的示例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)
>>> 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)