6

浮動小数点数のリストがあり、最初のリストから別のピリオド リターンのリストを生成したいと考えています。

これはミル実装の実行です(テストされていません-そして明らかにエラーチェック/処理はありません):

a = [100,105,100,95,100]

def calc_period_returns(values, period):
    output = []
    startpos, endpos = (period, len(values)-1)

    while True:
        current = values[startpos]
        previous = values[startpos-period]
        ret = 100*((current-previous)/(1.0*previous))
        output.append(ret)
        startpos += period
        if startpos > endpos:
            break
    return output


calc_period_returns(a,1)

# Expected output:
# [5.0, -4.7619047619047619, -5.0, 5.2631578947368416]

これを行うためのよりPython的な方法はありますか?おそらくリスト内包表記とマップを使用していますか?

4

4 に答える 4

20

数値のリストがどのくらい大きくなるかはわかりませんが、大量の数値を処理する場合は、numpy を確認する必要があります。副次的効果は、計算がずっと簡単に見えることです。

numpy を使用して、データの配列を作成します

>>> import numpy as np
>>> a = np.array([100,105,100,95,100], dtype=float)

単純な数値であるかのように配列を操作する

>>> np.diff(a) / a[:-1] * 100.
[ 5.         -4.76190476 -5.          5.26315789]
于 2012-04-19T11:19:53.417 に答える
12

どうぞ:

>>> [100.0 * a1 / a2 - 100 for a1, a2 in zip(a[1:], a)]
[5.0, -4.7619047619047592, -5.0, 5.2631578947368354]

リストの隣接する要素を比較したいので、次のように、関心のあるペアのリストを作成する方が適切です。

>>> a = range(5)
>>> a
[0, 1, 2, 3, 4]
>>> zip(a, a[1:])
[(0, 1), (1, 2), (2, 3), (3, 4)]

その後、数値のペアから変化率を抽出するのは簡単な計算です。

于 2012-04-19T11:04:31.827 に答える