2024-09-30 01:21:18 发布
网友
在执行PCA之后,我有一个和为1的数组(重新缩放并解释方差比例)。 为了得到一个好的screeplot,我需要很多组件,因此我希望能够以某种方式设置所需的累积和,并获得阵列中需要多少组件才能得到它。 例如[0, 1, 2, 3, 4, 5]我想要6的累积和,我会得到需要四个条目的答案
[0, 1, 2, 3, 4, 5]
您可以计算累加和,然后计算大于或等于阈值的.argmax(..):
.argmax(..)
>>> np.argmax(np.hstack((a.cumsum() >= 6, True))) + 1 4
因为a.cumsum()是累加和,因此:
a.cumsum()
>>> a.cumsum() array([ 0, 1, 3, 6, 10, 15])
因此,我们计算满足阈值的第一个指数:
>>> a.cumsum() >= 6 array([False, False, False, True, True, True])
我们附加一个True,这样在没有满足阈值的序列的情况下,它将返回元素数加一
True
假设a已排序,只需计算未超过阈值的条目数,然后添加最终的条目
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.cumsum与numpy.where一起使用:
numpy.cumsum
numpy.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])
num
[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个条目
您可以计算累加和,然后计算大于或等于阈值的
.argmax(..)
:因为
a.cumsum()
是累加和,因此:因此,我们计算满足阈值的第一个指数:
我们附加一个
True
,这样在没有满足阈值的序列的情况下,它将返回元素数加一假设
a
已排序,只需计算未超过阈值的条目数,然后添加最终的条目作为一项功能:
我的解决方案是将
numpy.cumsum
与numpy.where
一起使用:num
包含所有包含等于或高于停止条件的值的索引,因此需要获取第一个索引(numpy.where
返回一个2D数组,因此需要[0][0]
)一个线性函数:
Edit:不用说条目数需要+1,因为函数将返回完成累计和的第一个索引,所以索引3表示4个条目
相关问题 更多 >
编程相关推荐