如何使用 Numpy 计算数组中有多少个条目,例如累积总和为 0,9?



在形成 PCA 后,我有我的(重新缩放和方差比例解释(数组,总和为 1。 我必须使用许多组件才能获得良好的爬行图 - 因此我希望能够以某种方式设置所需的累积总和,并获得我需要多少数组组件才能获得它。 举个例子[0, 1, 2, 3, 4, 5]我想要 6 的累积总和,我会得到我需要四个条目的答案。

我的解决方案是将numpy.cumsumnumpy.where一起使用:

arr = np.arange(6) # dummy data
max_cum = 6 # your stop certerion
arr_cum = arr.cumsum() # calculate cumulative sums of your array
num = np.where(arr_cum >= max_cum) # get indices where arr_cum passes your max_cum
>> In: num[0][0]
>> Out:
3

num包含所有包含等于或高于止损条件的值的索引,因此您需要获取第一个(numpy.where返回一个 2D 数组,因此您需要[0][0](。

单行功能:

def lowest_cum(arr, max_cum):
return np.where(arr.cumsum() >= max_cum)[0][0]
>> In: lowest_cum(arr=np.arange(6), max_cum=6)
>> Out:
3

编辑:不用说,条目数需要 +1,因为该函数将返回完成 cumsum 的第一个索引,因此索引 3 表示 4 个条目。

您可以计算累计总和,然后计算大于或等于阈值的.argmax(..)

>>> np.argmax(np.hstack((a.cumsum() >= 6, True))) + 1
4

由于a.cumsum()是累计总和,因此:

>>> a.cumsum()
array([ 0,  1,  3,  6, 10, 15])

因此,我们计算满足阈值的第一个索引:

>>> a.cumsum() >= 6
array([False, False, False,  True,  True,  True])

我们附加一个True,这样如果没有满足阈值的等值,它将返回元素数一。

假设a已经排序,只需计算尚未超过阈值的条目数,并添加最终超过阈值的条目。

a = np.arange(6)
num = (a.cumsum() < 6).sum() + 1 # 4

作为一个函数:

def cum_thresh(a, thresh):
"""
the sequence a has to be sorted
"""
return (np.cumsum(a) < thresh).sum() + 1

最新更新