NumPy 中的多轴均值
Mean over multiple axis in NumPy
我想以 Pythonic 的方式编写下面的代码,在两个轴上应用均值。最好的方法是什么?
import numpy as np
m = np.random.rand(30, 10, 10)
m_mean = np.zeros((30, 1))
for j in range(30):
m_mean[j, 0] = m[j, :, :].mean()
如果你有足够新的 NumPy,你可以这样做
m_mean = m.mean(axis=(1, 2))
我相信这是在 1.7 中引入的,但我不确定。该文档仅在 1.10 中进行了更新以反映这一点,但它在更早的版本中起作用。
如果你的 NumPy 太旧,你可以手动取平均值一点:
m_mean = m.sum(axis=2).sum(axis=1) / np.prod(m.shape[1:3])
这些都将产生一维结果。如果你真的想要那个额外的 length-1 轴,你可以像 m_mean = m_mean[:, np.newaxis]
那样把额外的轴放在那里。
您还可以使用 numpy.mean()
ufunc 并将输出数组作为参数传递给 out=
,如:
np.mean(m, axis=(1, 2), out=m_mean)
我想以 Pythonic 的方式编写下面的代码,在两个轴上应用均值。最好的方法是什么?
import numpy as np
m = np.random.rand(30, 10, 10)
m_mean = np.zeros((30, 1))
for j in range(30):
m_mean[j, 0] = m[j, :, :].mean()
如果你有足够新的 NumPy,你可以这样做
m_mean = m.mean(axis=(1, 2))
我相信这是在 1.7 中引入的,但我不确定。该文档仅在 1.10 中进行了更新以反映这一点,但它在更早的版本中起作用。
如果你的 NumPy 太旧,你可以手动取平均值一点:
m_mean = m.sum(axis=2).sum(axis=1) / np.prod(m.shape[1:3])
这些都将产生一维结果。如果你真的想要那个额外的 length-1 轴,你可以像 m_mean = m_mean[:, np.newaxis]
那样把额外的轴放在那里。
您还可以使用 numpy.mean()
ufunc 并将输出数组作为参数传递给 out=
,如:
np.mean(m, axis=(1, 2), out=m_mean)