如何正确numpy.nanmean和3D数组上的axis关键字?

时间:2018-10-05 12:12:25

标签: python numpy

我有一个形状为(3,16,110)的NumPy数组。 我想获取每个(16,110)数组中的每个元素,并将其与其余2个(16,110)数组中的其他两个元素取平均。结果数组的尺寸应为(16,110)

例如,用较小的(2,3)数组显示我的意思:

a= [(0, 2, nan),
    (1, 3, 1)  ]

b = [(1, 3, 2),
     (3, 4, 7)]

c = [(nan, 5, 2),
     (1, 3, 2)]

我想生成一个尺寸为(2,3)的数组,该数组首先取(0,1,nan)的平均值,然后移至下一个元素(2,3,5)等...

那么使用nan并考虑np.nanmean(3darray, axis=0)的正确方法是吗? 我不太了解axis关键字,如果有人可以解释:)

,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试一下:

import numpy as np

a= [(0, 2, np.NaN),
   ...:     (1, 3, 1)  ]
   ...: 
   ...: b = [(1, 3, 2),
   ...:      (3, 4, 7)]
   ...: 
   ...: c = [(np.NaN, 5, 2),
   ...:      (1, 3, 2)]


d=[a,b,c,b]

np.array(d).shape

>>(4, 2, 3)

np.nanmean(d,axis=0) #removes the first axis

>>array([[0.66666667, 3.25      , 2.        ],
       [2.        , 3.5       , 4.25      ]])

np.nanmean(d,axis=0).shape

>>(2, 3)

np.nanmean(d,axis=1) #removes the second axis

>>array([[0.5, 2.5, 1. ],
       [2. , 3.5, 4.5],
       [1. , 4. , 2. ],
       [2. , 3.5, 4.5]])

np.nanmean(d,axis=1).shape

>>(4, 3)

np.nanmean(d,axis=2) #removes the third axis

>>array([[1.        , 1.66666667],
       [2.        , 4.66666667],
       [3.5       , 2.        ],
       [2.        , 4.66666667]])

np.nanmean(d,axis=2).shape

>>(4, 2)

axis关键字告诉您将平均哪个轴。换句话说,该轴将通过平均移除。

因此,您特别需要的是np.nanmean(d,axis=0)