如何找到一个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数组的多个均匀分布的方法?的主要内容,如果未能解决你的问题,请参考以下文章

在动态空间中均匀分布多个项目

Python机器学习入门——科学计算库(Numpy)

使用numpy产生随机数

Numpy —— 随机数np.random

生成特定分布随机数的方法

如何在 Pytorch Lightning 中使用 numpy 数据集