Python 3.6で、重みが変数によって制限されているリストの加重平均を取得する方法

Cennnn

タイトルが意味をなすといいのですが。私が達成しようとしているのは、さまざまな価格でさまざまな金額で入手できる靴の加重平均価格を取得することです。だから私は例えば持っています:

list_prices = [12,12.7,13.5,14.3]
list_amounts = [85,100,30,54]
BuyAmount = x

加重平均価格と、靴1足あたりに支払った最高価格を知りたいx個の靴を購入した場合(最初に最も安いものを購入したい場合)

これは私が今持っているものです(私はnumpyを使用しています):

    if list_amounts[0] >= BuyAmount:
        avgprice = list_prices[0]
        highprice = list_prices[0]

    elif (sum(list_amounts[0: 2])) >= BuyAmount:
        avgprice = np.average(list_prices[0: 2], weights=[list_amounts[0],BuyAmount - list_amounts[0]])
        highprice = list_prices[1]

    elif (sum(list_amounts[0: 3])) >= BuyAmount:
        avgprice = np.average(list_prices[0: 3], weights=[list_amounts[0],list_amounts[1],BuyAmount - (sum(list_amounts[0: 2]))])
        highprice = list_prices[2]

    elif (sum(list_amounts[0: 4])) >= BuyAmount:
        avgprice = np.average(list_prices[0: 4], weights=[list_amounts[0],list_amounts[1],list_amounts[2],BuyAmount - (sum(list_amounts[0: 3]))])
        highprice = list_prices[3]

    print(avgprice)
    print(highprice)

このコードは機能しますが、おそらく過度に複雑で拡張性があります。特に、20以上のアイテムで金額と価格のリストを処理できるようにしたいので。

これを行うためのより良い方法は何ですか?

Divakar

cumsumこれらのスライスされた合計を置き換えargmax、これらのIF-case操作のスライス制限を設定するために使用される適切なインデックスを取得するために使用する一般的なベクトル化されたソリューションを次に示します-

# Use cumsum to replace sliced summations - Basically all those 
# `list_amounts[0]`, `sum(list_amounts[0: 2]))`, `sum(list_amounts[0: 3])`, etc.
c = np.cumsum(list_amounts)

# Use argmax to decide the slicing limits for the intended slicing operations.
# So, this would replace the last number in the slices - 
# list_prices[0: 2], list_prices[0: 3], etc.
idx = (c >= BuyAmount).argmax()

# Use the slicing limit to get the slice off list_prices needed as the first
# input to numpy.average
l = list_prices[:idx+1]

# This step gets us the weights. Now, in the weights we have two parts. E.g.
# for the third-IF we have : 
# [list_amounts[0],list_amounts[1],BuyAmount - (sum(list_amounts[0: 2]))]
# Here, we would slice off list_amounts limited by `idx`.
# The second part is sliced summation limited by `idx` again.
w = np.r_[list_amounts[:idx], BuyAmount - c[idx-1]]

# Finally, plug-in the two inputs to np.average and get avgprice output.
avgprice = np.average(l,weights=w)

# Get idx element off list_prices as the highprice output.
highprice = list_prices[idx]

当社は、連結ステップ(とを削除するために最適化を進めることができますnp.r_)とを取得avgpriceので、同様に、 -

slice1_sum = np.multiply(list_prices[:idx], list_amounts[:idx]).sum()
        # or np.dot(list_prices[:idx], list_amounts[:idx])
slice2_sum = list_prices[idx]*(BuyAmount - c[idx-1])
weight_sum = np.sum(list_amounts[:idx]) + BuyAmount - c[idx-1]
avgprice = (slice1_sum+slice2_sum)/weight_sum

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python3のRLockがスレッドによって取得されているかどうかを確認する方法

分類Dev

Python 3の関数によって返された配列に基づいて辞書のキーと値のペアを取得する方法

分類Dev

Python3の辞書に従ってexecを使用してリストを変数に割り当てる方法は?

分類Dev

Python 3: 特定の文字列が含まれている場合に、辞書を構成するすべてのリストを検索して取得する方法

分類Dev

datetimenowを使用してPython3で関数が実行されるのを待っていますか?

分類Dev

複数のバージョンがインストールされているデフォルトのpython 3(Ubuntu 18.04)を変更するにはどうすればよいですか?

分類Dev

3つの小さなintからのバイトを連結して、Pythonでそれらのバイトによって表されるより大きな数を作成するにはどうすればよいですか?

分類Dev

Python3でリストに入力制限を設定する方法

分類Dev

Python3のループで再起動するたびに値を変更する変数を使用してリストをインクリメントするにはどうすればよいですか?

分類Dev

Python3 __slots__を使用してクラス内のクラス変数をシリアル化するにはどうすればよいですか?

分類Dev

Python3で呼び出し元の関数にさらに値を返し、結果を表示するにはどうすればよいですか?現在、インクリメントなしで最初の値のみを出力していますか?

分類Dev

Python 3 Clickアプリでシェルによって提供されるファイルのリストを反復処理するにはどうすればよいですか?

分類Dev

TypeError:関数を呼び出すときにPython 3にリストされていない、strである必要があります

分類Dev

Python3で番号順になっているリスト内の番号を見つける方法は?

分類Dev

python3-Pythonリクエストで最大URL制限を克服する方法

分類Dev

Python 3でfloatの後の桁数を制限する方法は?

分類Dev

リストのPythonリストを各サブリストの最初のエントリの値に従って3つの別々のリストに分割するにはどうすればよいですか?

分類Dev

ライブラリにインストールされているものではなく、Homebrewにインストールされているpython3バージョンを使用するにはどうすればよいですか?

分類Dev

エントリ入力をtkinterの変数に保存する方法私はPython3を使用しています

分類Dev

私のRDSには、s3に保存されている画像へのリンクがあります。ラムダPython関数でそのリンクを画像に変換する方法

分類Dev

リストにインデックスを付けるときにPython3.xが暗黙的にバイトを他のクラスに変換しないようにするための組み込みの方法は何ですか?

分類Dev

私のPythonスクリプトが定義されているすべての変数をすべて渡さずに取得する方法はありますか?

分類Dev

指定された実行可能ファイルが実行されているかどうかをチェックするこのサブプロセス関数を、Python 2と3の両方で機能するように変更するにはどうすればよいですか?

分類Dev

Python3のテキストファイルからカスタム変数を取得および作成するにはどうすればよいですか?

分類Dev

ターミナルまたはマルチプロセッシングライブラリなしでPythonスクリプトによって使用されるCPUの数を制限するにはどうすればよいですか?

分類Dev

Pythonファイルをbashスクリプトによってのみ実行されるように制限します

分類Dev

Python3で指定されたポイントによってヒストグラムをプロットする方法

分類Dev

クラス/変数が Python 3 にインポートされたかどうかを検出するにはどうすればよいですか?

分類Dev

2次元Pythonリストを[[9] * 3] * 3として初期化すると、同じ配列への参照が作成されるようです。どうしたの?

Related 関連記事

  1. 1

    Python3のRLockがスレッドによって取得されているかどうかを確認する方法

  2. 2

    Python 3の関数によって返された配列に基づいて辞書のキーと値のペアを取得する方法

  3. 3

    Python3の辞書に従ってexecを使用してリストを変数に割り当てる方法は?

  4. 4

    Python 3: 特定の文字列が含まれている場合に、辞書を構成するすべてのリストを検索して取得する方法

  5. 5

    datetimenowを使用してPython3で関数が実行されるのを待っていますか?

  6. 6

    複数のバージョンがインストールされているデフォルトのpython 3(Ubuntu 18.04)を変更するにはどうすればよいですか?

  7. 7

    3つの小さなintからのバイトを連結して、Pythonでそれらのバイトによって表されるより大きな数を作成するにはどうすればよいですか?

  8. 8

    Python3でリストに入力制限を設定する方法

  9. 9

    Python3のループで再起動するたびに値を変更する変数を使用してリストをインクリメントするにはどうすればよいですか?

  10. 10

    Python3 __slots__を使用してクラス内のクラス変数をシリアル化するにはどうすればよいですか?

  11. 11

    Python3で呼び出し元の関数にさらに値を返し、結果を表示するにはどうすればよいですか?現在、インクリメントなしで最初の値のみを出力していますか?

  12. 12

    Python 3 Clickアプリでシェルによって提供されるファイルのリストを反復処理するにはどうすればよいですか?

  13. 13

    TypeError:関数を呼び出すときにPython 3にリストされていない、strである必要があります

  14. 14

    Python3で番号順になっているリスト内の番号を見つける方法は?

  15. 15

    python3-Pythonリクエストで最大URL制限を克服する方法

  16. 16

    Python 3でfloatの後の桁数を制限する方法は?

  17. 17

    リストのPythonリストを各サブリストの最初のエントリの値に従って3つの別々のリストに分割するにはどうすればよいですか?

  18. 18

    ライブラリにインストールされているものではなく、Homebrewにインストールされているpython3バージョンを使用するにはどうすればよいですか?

  19. 19

    エントリ入力をtkinterの変数に保存する方法私はPython3を使用しています

  20. 20

    私のRDSには、s3に保存されている画像へのリンクがあります。ラムダPython関数でそのリンクを画像に変換する方法

  21. 21

    リストにインデックスを付けるときにPython3.xが暗黙的にバイトを他のクラスに変換しないようにするための組み込みの方法は何ですか?

  22. 22

    私のPythonスクリプトが定義されているすべての変数をすべて渡さずに取得する方法はありますか?

  23. 23

    指定された実行可能ファイルが実行されているかどうかをチェックするこのサブプロセス関数を、Python 2と3の両方で機能するように変更するにはどうすればよいですか?

  24. 24

    Python3のテキストファイルからカスタム変数を取得および作成するにはどうすればよいですか?

  25. 25

    ターミナルまたはマルチプロセッシングライブラリなしでPythonスクリプトによって使用されるCPUの数を制限するにはどうすればよいですか?

  26. 26

    Pythonファイルをbashスクリプトによってのみ実行されるように制限します

  27. 27

    Python3で指定されたポイントによってヒストグラムをプロットする方法

  28. 28

    クラス/変数が Python 3 にインポートされたかどうかを検出するにはどうすればよいですか?

  29. 29

    2次元Pythonリストを[[9] * 3] * 3として初期化すると、同じ配列への参照が作成されるようです。どうしたの?

ホットタグ

アーカイブ