使用 heapq.nlargest 和百分比 - Python
Using heapq.nlargest with a Percentage - Python
有谁知道如何将 heapq.nlargest 用于百分比而不是数字?目前我有
heapq.nlargest(187030, y)
但这让我获得了前 187030 个数字。我需要它来为每个数组获取前 10% 的数字,因为并非所有数组都有 180 万个。
干杯
是的。在幕后,堆实际上是一个具有某些属性的列表(它使用所谓的 implicit data structure)。
所以我们可以先取len(y)
获取元素个数。除以 10
,我们得到 10% number 个元素。所以我们可以使用:
heapq.nlargest(<b>len(y)//10</b>, y)
或者如果您想使用百分比作为参数:
<b>p = 17</b> # top 17 procent
heapq.nlargest(<b>len(y)*p//100</b>, y)
您还可以使用 分数 (例如顶部 0.14
):
<b>from math import round</b>
<b>p = 0.14</b> # top 14 procent
heapq.nlargest(<b>round(len(y)*p)</b>, y)
有谁知道如何将 heapq.nlargest 用于百分比而不是数字?目前我有
heapq.nlargest(187030, y)
但这让我获得了前 187030 个数字。我需要它来为每个数组获取前 10% 的数字,因为并非所有数组都有 180 万个。
干杯
是的。在幕后,堆实际上是一个具有某些属性的列表(它使用所谓的 implicit data structure)。
所以我们可以先取len(y)
获取元素个数。除以 10
,我们得到 10% number 个元素。所以我们可以使用:
heapq.nlargest(<b>len(y)//10</b>, y)
或者如果您想使用百分比作为参数:
<b>p = 17</b> # top 17 procent
heapq.nlargest(<b>len(y)*p//100</b>, y)
您还可以使用 分数 (例如顶部 0.14
):
<b>from math import round</b>
<b>p = 0.14</b> # top 14 procent
heapq.nlargest(<b>round(len(y)*p)</b>, y)