如何找到 numpy 数组的多个均匀分布的方法?

How to find multiple equally distributed means of a numpy array?

假设我有一个包含 100 个数字的列表。我可以通过求和并除以元素的数量来找到平均值。但是我怎样才能找到两个值,一个偏向列表左侧(假设列表是有序的),一个偏向右侧,以便将列表平均分为三个块?

对数组进行排序并取第 33 个和第 66 个元素不起作用,因为我可以在第 33 个位置之前全为 1,而在第 33 个位置之后有更大的值,因此第 33 个位置在数组中太早了。这两个 'means' 取决于数组的值,而不仅仅是索引。

我确定我正在尝试做的事情有一个正确的命名,但我现在真的记不起来了。

您要找的是一个 quantile, and you can look towards numpy's quantile 函数。

看起来你正在尝试做的是计算“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:]

你可以尝试 numpy.quantile 例如 np.quantile(your_list, [0.33, 0.66]) 我认为应该可以解决问题