有没有更具python风格的方法来编写只更新变量的while循环?

2024-05-02 05:51:27 发布

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

我有一个while循环,我想知道他们是不是用一种更像python的方式来写它:

k = 1
while np.sum(s[0:k]) / s_sum < retained_variance:
    k += 1

s是一个numpy向量。谢谢!你知道吗


Tags: numpynp方式向量sumvariancewhileretained
3条回答

我认为这是一个相当的python:显式比隐式好。你知道吗

下面代码的最后一行将在一行中找到k的值:

import numpy as np
import math

s = np.array([1,2,3,4,5,6,7,8,9])
s_sum = 1
retained_variance = 4.3

k = 1
while np.sum(s[0:k]) / s_sum < retained_variance:
    k += 1

print (k)

print (np.ceil(np.interp(retained_variance,s.cumsum()/s_sum,range(1,len(s)+1))))

可能不是最有效的解决方案,但如果需要搜索大部分阵列,则速度会很快:

import numpy as np

ss = np.cumsum(s)  # array with cumulative sum
k = ss.searchsorted(retained_variance*s_sum) # exploit that ss is monotonically increasing

编辑:西蒙指出

k = np.cumsum(s).searchsorted(retained_variance*s_sum) + 1

是对应于问题的值。你知道吗

相关问题 更多 >