我如何做以下事项:
使用3D numpy数组时,我想在一个维度中取平均值,并将值分配回具有相同形状的3D数组,并在方法的重复值中导出...
我很难在3D中找到一个例子,但在2D(4x4)中它看起来有点像我猜想
array[[1, 1, 2, 2]
[2, 2, 1, 0]
[1, 1, 2, 2]
[4, 8, 3, 0]]
成为
array[[2, 3, 2, 1]
[2, 3, 2, 1]
[2, 3, 2, 1]
[2, 3, 2, 1]]
我在考虑平均值时遇到np.mean
和尺寸损失。
答案 0 :(得分:3)
您可以使用keepdims
关键字参数来保持消失的维度,例如:
>>> a = np.random.randint(10, size=(4, 4)).astype(np.double)
>>> a
array([[ 7., 9., 9., 7.],
[ 7., 1., 3., 4.],
[ 9., 5., 9., 0.],
[ 6., 9., 1., 5.]])
>>> a[:] = np.mean(a, axis=0, keepdims=True)
>>> a
array([[ 7.25, 6. , 5.5 , 4. ],
[ 7.25, 6. , 5.5 , 4. ],
[ 7.25, 6. , 5.5 , 4. ],
[ 7.25, 6. , 5.5 , 4. ]])
答案 1 :(得分:1)
你可以在取平均值后重新调整数组:
In [24]: a = np.array([[1, 1, 2, 2],
[2, 2, 1, 0],
[2, 3, 2, 1],
[4, 8, 3, 0]])
In [25]: np.resize(a.mean(axis=0).astype(int), a.shape)
Out[25]:
array([[2, 3, 2, 0],
[2, 3, 2, 0],
[2, 3, 2, 0],
[2, 3, 2, 0]])
答案 2 :(得分:1)
为了正确地满足平均值的重复值出现在它们的导出方向上的条件,有必要将reshape
平均数组转换为可与原始数组一起播放的形状。
具体来说,平均数组应该与原始数组具有相同的形状,除了平均值的维度长度应为1。
以下函数适用于任何形状的数组和任意数量的维度:
def fill_mean(arr, axis):
mean_arr = np.mean(arr, axis=axis)
mean_shape = list(arr.shape)
mean_shape[axis] = 1
mean_arr = mean_arr.reshape(mean_shape)
return np.zeros_like(arr) + mean_arr
这是应用于我称为a
的示例数组的函数:
>>> fill_mean(a, 0)
array([[ 2.25, 3.5 , 2. , 0.75],
[ 2.25, 3.5 , 2. , 0.75],
[ 2.25, 3.5 , 2. , 0.75],
[ 2.25, 3.5 , 2. , 0.75]])
>>> fill_mean(a, 1)
array([[ 1.5 , 1.5 , 1.5 , 1.5 ],
[ 1.25, 1.25, 1.25, 1.25],
[ 2. , 2. , 2. , 2. ],
[ 3.75, 3.75, 3.75, 3.75]])
答案 3 :(得分:0)
构造numpy数组
import numpy as np
data = np.array(
[[1, 1, 2, 2],
[2, 2, 1, 0],
[1, 1, 2, 2],
[4, 8, 3, 0]]
)
使用axis参数获取沿特定轴的平均值
>>> means = np.mean(data, axis=0)
>>> means
array([ 2., 3., 2., 1.])
现在将生成的数组平铺为原始
的形状>>> print np.tile(means, (4,1))
[[ 2. 3. 2. 1.]
[ 2. 3. 2. 1.]
[ 2. 3. 2. 1.]
[ 2. 3. 2. 1.]]
您可以使用data.shape
中的参数替换4,1