一个三维numpy数组的众数/中位数/均值

5

我有一个3d的numpy数组,我的目标是获取它的平均值/众数/中位数。

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

我想要获取例如:

[430,232,22] 作为众数

有没有一种方法可以做到这一点?标准的np.mean(array)给了我一个非常大的数组。

我不知道这是否正确?

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

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


请让我知道任何想法。 - High schooler
1个回答

6

您想要沿着前两个轴获取平均值/中位数/众数。以下代码可以实现:

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需要展平的数组,因此需要进行reshape操作。而bincount仅处理1D输入,因此需要使用列表推导式,并结合一些转置魔法来进行解包。

1
对于现在发现这篇文章的任何人,np.median不再需要一个扁平化的数组。自版本1.9.0以来,支持一系列轴,并且默认操作是在扁平化的数组上计算中位数,除非在轴参数中另有规定。 - OscarVanL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接