例如,我如何使用Numpy计算数组中给出0,9的累积和的条目数?

2024-09-30 01:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

在执行PCA之后,我有一个和为1的数组(重新缩放并解释方差比例)。 为了得到一个好的screeplot,我需要很多组件,因此我希望能够以某种方式设置所需的累积和,并获得阵列中需要多少组件才能得到它。 例如[0, 1, 2, 3, 4, 5]我想要6的累积和,我会得到需要四个条目的答案


Tags: 答案目的方式组件数组比例方差我会
3条回答

您可以计算累加和,然后计算大于或等于阈值的.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

我的解决方案是将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

Edit:不用说条目数需要+1,因为函数将返回完成累计和的第一个索引,所以索引3表示4个条目

相关问题 更多 >

    热门问题