【问题标题】:How to get an average 'spread' from a list of numbers?如何从数字列表中获得平均“点差”?
【发布时间】:2019-02-22 09:11:39
【问题描述】:

假设我有一个数字列表:

some_numbers = [16.0,  16.01,  24.53,  22.99,  22.72,  22.71,  22.2,  21.36,  21.34,  
21.0,  22.67,  22.62,  15.89,  23.54,  27.0,  21.35,  26.99,  25.46,  22.54,  22.53,  
17.99,  22.13,  17.97,  17.96,  17.95,  22.4,  22.32,  22.25,  22.19,  22.16,  
20.68,  21.74,  15.38,  11.13,  15.82,  22.33,  22.31,  22.23,  22.15,  22.12,  
22.11,  22.07,  18.99,  18.94,  18.86,  18.85,  18.82,  18.81,  16.79,  15.98,  
15.96,  15.94,  15.9,  15.86,  15.85,  15.83,  11.47,  11.46,  11.36,  11.34,  
11.32,  11.28,  11.26,  11.25,  11.21,  11.19,  11.18,  9.99]

但列表包含的数据有点过多,我想传达一下。我想打印其中的 10 个数字。 1 是最高数字,10 是最低数字,我如何对列表进行排序并打印 10 个数字的范围来表示从最高到最低的价差?

假设列表是[1,2,3,4,5,6,7,8,9,10,11,12,13],我想要在该范围内的四个数字的扩展,扩展将是[1,5,9,13]

【问题讨论】:

  • 我没有得到“1 是最高数字,10 是最低数字”部分。另外,选择这 10 个数字的规则是什么?
  • 对不起,让我澄清一下:假设列表是 [1,2,3,4,5,6,7,8,9,10,11,12,13] 和我想要在该范围内的四个数字的传播,传播将是 [1,5,9,13]
  • 不过,很不清楚 OP 所说的“代表传播”是什么意思。我想他的意思不是“随机选择”。我可以想象尝试或多或少地从最小到最大定期选择它们,或者使样本的标准偏差接近原始标准偏差,或者其他任何...
  • 是的。对它们进行排序,取 lowest,取 highest 并取其间的每个 n_th ...计算 n_th 以使其适合。您是如何尝试解决的? minimal reproducible example?

标签: python


【解决方案1】:

试试这个:

sorted(list)[::len(list)/9]

输出:

[6.34, 11.19, 13.61, 14.56, 15.92, 16.91, 17.97, 19.65, 20.87, 26.81]

编辑:

如果len(list) % 9 != 0max(list) 将不在此列表中

【讨论】:

  • 这是完美的,但我确实需要确保 new_list[0] 是最小的数字,而 new_list[10] 是最大的数字
  • 您可以使用max(list) 手动添加它,尽管原始列表中最后一个元素和最大元素之间的间隔可能不会一致。
  • 这对我的应用程序来说应该不是问题。感谢您的回答!
【解决方案2】:

使用np.percentilenp.linspace

import numpy as np

np.percentile(l, np.linspace(100, 0, 10), interpolation='nearest')
# array([27.  , 21.02, 19.7 , 17.99, 16.93, 15.94, 14.57, 13.77, 11.19,
        6.34])

逻辑:

np.percentileinterpolation='nearest' 返回给定数组的最接近的 q-th 元素。

np.linspace 从 0 到 100(包括 0 和 100)创建等距的 10 个元素,以生成第 q 个百分位数。

【讨论】:

  • 这个问题是我需要列表中的数字。
  • @Zak 您可以随时将tolist() 添加到任何给定的numpy.array 以使其成为列表:)
猜你喜欢
  • 2020-12-05
  • 2019-08-23
  • 1970-01-01
  • 2022-08-14
  • 2021-10-20
  • 2021-09-25
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
相关资源
最近更新 更多