Mean over multiple axis in NumPy

戏子无情 提交于 2020-04-13 05:40:59

问题


I Want to write the code below as Pythonic way, applying mean over two axis. What the best way to do this?

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

回答1:


If you have a sufficiently recent NumPy, you can do

m_mean = m.mean(axis=(1, 2))

I believe this was introduced in 1.7, though I'm not sure. The documentation was only updated to reflect this in 1.10, but it worked earlier than that.

If your NumPy is too old, you can take the mean a bit more manually:

m_mean = m.sum(axis=2).sum(axis=1) / np.prod(m.shape[1:3])

These will both produce 1-dimensional results. If you really want that extra length-1 axis, you can do something like m_mean = m_mean[:, np.newaxis] to put the extra axis there.




回答2:


You can also use the numpy.mean() ufunc and pass the output array as an argument to out= as in:

np.mean(m, axis=(1, 2), out=m_mean)


来源:https://stackoverflow.com/questions/33552193/mean-over-multiple-axis-in-numpy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!