如何找到一个numpy数组的多个均匀分布的方法?
Posted
技术标签:
【中文标题】如何找到一个numpy数组的多个均匀分布的方法?【英文标题】:How to find multiple equally distributed means of a numpy array? 【发布时间】:2021-05-23 04:39:24 【问题描述】:假设我有一个包含 100 个数字的列表。我可以通过求和并除以元素的数量来找到平均值。但是我怎样才能找到两个值,一个偏向列表左侧(假设列表是有序的),另一个偏向右侧,以便将列表平均分为三个块?
对数组进行排序并获取第 33 个和第 66 个元素不起作用,因为我可以在第 33 个位置之前全为 1,而在之后的值更大,因此第 33 个位置在数组中为时过早。这两个“手段”取决于数组的值,而不仅仅是索引。
我确定我正在尝试做的事情有一个正确的命名,但我现在不记得了。
【问题讨论】:
【参考方案1】:看起来您正在尝试做的是计算“terciles”,这是quantile 的一种特殊类型。
所以你可以使用 numpy 为你计算它:
import numpy as np
data = np.linspace(0, 1.0, 100) # You data, here a toy example
q_1, q_2 = np.quantile(data, q=[1/3, 2/3])
q_1_idx, q_2_idx = np.searchsorted(data, [q_1, q_2], side='right')
q_1, q_2
是您要查找的“平均值”,q_1_idx, q_2_idx
是数组中的相关索引。然后,要进行拆分,您只需:
data_1, data_2, data_3 = data[:q_1_idx], data[q_1_idx:q_2_idx], data[q_2_idx:]
【讨论】:
【参考方案2】:你要找的东西叫做quantile,你可以看看numpy的quantile
函数。
【讨论】:
【参考方案3】:您可以尝试 numpy.quantile 例如 np.quantile(your_list, [0.33, 0.66]) 我认为应该可以解决问题
【讨论】:
以上是关于如何找到一个numpy数组的多个均匀分布的方法?的主要内容,如果未能解决你的问题,请参考以下文章