模式/中位数/ 3d numpy数组的平均值

时间:2014-02-07 00:45:01

标签: python numpy scipy

我有一个3d numpy数组,我的目标是得到它的均值/模式/中位数。

它的形状为[500,300,3]

我想举个例子:

[430,232,22]作为模式

有办法做到这一点吗?标准的np.mean(数组)给了我一个非常大的数组。

我不知道这实际上是否正确?

weather_image.mean(axis=0).mean(axis=0)

它给我一个长度为3的1d np数组

1 个答案:

答案 0 :(得分:4)

您希望沿前两个轴获得平均值/中位数/模式 。这应该有效:

data = np.random.randint(1000, size=(500, 300, 3))

>>> np.mean(data, axis=(0, 1)) # in nunpy >= 1.7
array([ 499.06044   ,  499.01136   ,  498.60614667])
>>> np.mean(np.mean(data, axis=0), axis=0) # in numpy < 1.7
array([ 499.06044   ,  499.01136   ,  498.60614667])
>>> np.median(data.reshape(-1, 3), axis=0)
array([ 499.,  499.,  498.]) # mode
>>> np.argmax([np.bincount(x) for x in data.reshape(-1, 3).T], axis=1)
array([240, 519, 842], dtype=int64)

请注意np.median需要一个扁平数组,因此需要重新整形。并且bincount只处理1D输入,因此列表理解,加上一个用于解包的小转换魔法。