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


问题内容

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

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

我想举个例子:

[430,232,22]作为模式

有没有办法做到这一点?标准的np.mean(array)给了我很大的数组。

我不知道这是真的吗?

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

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


问题答案:

您想要 沿前两个轴 获取均值/中位数/ 众数 。这应该工作:

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仅处理一维输入,因此列表理解以及用于拆包的一些易变魔术。