2015-11-05 72 views
3

我想以Pythonic的方式编写下面的代码,在两个轴上应用平均值。什么是最好的方法来做到这一点?平均值超过两轴Numpy - Pythonic Way

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() 
+0

为什么'm_mean'是一个2D数组? – user2357112

+1

为什么只用一行创建第二个numpy数组?为什么不只是一个简单的列表? –

+3

NumPythonic的方式是'm.mean(axis =(1,2))'。 – Divakar

回答

7

如果你有足够最近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]) 

这些都将产生1维的结果。如果你真的想要这个额外的长度-1轴,你可以做一些像m_mean = m_mean[:, np.newaxis]这样的额外的轴。