2017-07-21 14 views
1

startからstopまでのnumpyの範囲を、前の数値に基づいて(固定)パーセンテージの増分を使用して作成したいとします。たとえば、100%、102%、104.04、106.12などnumpyの範囲はパーセンテージの増分を使用して作成

明らかにこれは、発電機を使用して、よりエレガントに、リストを反復処理等により行うことができます。

def pct_incrementer(start, stop, step_pct): 
    val = start 
    yield val 
    while True: 
     val += val * step_pct 
     if val >= stop: 
      break 
     yield val 

np.array(list(pct_incrementer(100, 200, 0.02))) 
# or (as I've just learned!) 
np.fromiter(pct_incrementer(100, 200, 0.02), float) 

はnumpyの(またはパンダを)いネイティブでこれを行うための機能を持っています? (私が見つけることができないので!)。おそらく、同じことをするためにnp.array([100] * 10)を操作する方法はありますか?

ありがとうございます!

答えて

0

あなたはfullcumprodを使用することができます。

きちんとした答えだ

xs = 100 * np.full(np.log(2.0)/np.log(1.02),1.02).cumprod()

+0

...私はこれを行うだろうと、いくつかのログ策略があると思います感情を持っていました。ありがとうございました。 – user908094

+0

しかし、(%timeitを使用して)np.fromiter(pct_incrementer())は、値が100-200 @ 2% – user908094

+0

の小さな値を使用して、.full()/、cumprod()よりもかなり速いことを指摘します。 @ user908094これは面白いです。また、私のマシンでは、ほとんどの減速は '* 100'から発生します。いくつかのグーグルでは、使用できる「np.logspace」と「np.geomspace」が表示されます。 –

関連する問題