私はPythonを使い始めました。これまでの経験はすべてC++言語でした。条件付きループの配列のためのPythonicコード
"良い" Pythonを学ぼうとして、私はこのCのような関数をPythonに変換しようとしていました。
var MMI(var *Data,int Length)
{
var m = Median(Data,Length);
int i, nh=0, nl=0;
for(i=1; i<Length; i++) {
if(Data[i] > m && Data[i] > Data[i-1])
nl++;
else if(Data[i] < m && Data[i] < Data[i-1])
nh++;
}
return 100.*(nl+nh)/(Length-1);
}
私はforループで簡単にそれを行うことができますかなり確信しているが、私は、配列の一連の操作ではなく、明示的なループを使用してそれを実行しようとしてきました。私が思い付いた:
import numpy as np
import pandas as pd
from pandas import Series
def MMI(buffer, mmi_length):
window = Series(buffer[:mmi_length])
m = window.median()
nh = np.logical_and([window > m], [window > window.shift(1)])
nl = np.logical_and([window < m], [window < window.shift(1)])
nl = np.logical_and([not nh], [nl])
return 100 * (nh.sum() + nl.sum())/mmi_length
最終np.logical_and([not nh], [n])
が、私は理解していない「真理値あいまいな」エラーを与えるが、より重要なのは、私はこのアプローチは、実際にPythonで有効な結果をもたらすかどうかはわからないんだけど。
誰かがこれをエレガントにコーディングしなければならないか、頭の中で私を叩いて、ループを使用するように指示しなければならないのでしょうか?
イアン
Ian、あなたの示された興味がML&algo-tradingの両方に入ると、むしろ** 'numpy' strided-tricks >>> http://www.scipy-lectures.org/を楽しむことができますadvanced/advanced_numpy /#indexing-scheme-strides **シリーズでは、両方のquant&MLモデルですぐにInRAM処理で実現不可能な形状に成長します。そのため、膨大な量のデータをパンダの抽象化に再パッケージングしても、生き残ることはできません。疑わしい場合は、1M、10M、100Mのデータ行のコードをベンチマークして、パフォーマンスの緩和を見てください(これは明らかに小さくて小さな行列のサイズには寛容に思えるかもしれません...)。 – user3666197
ありがとうございます - 私は見ていますが、正直言って私は大規模なデータセットに適用するのに役立つものはまだありません。 –