signal_gen関数で表されるセンサーからのデータを処理するスクリプトを記述しています。テスト関数で見ることができるように、ループはかなりループしています。この関数は何度も呼び出されるので、少し遅くなり、最適化のための正しい方向へのプッシュで素敵です。Pythonのnumpyでのループのベクトル化/最適化
forループをvectorizatid配列と交換することができますが、i_avg [i]行をどのように記述するかについて頭を浮かべることはできません。なぜなら、単一要素y [i] np.cosの中で配列全体xと乗算され、これはやはりi_avgの刺激にすぎません。私たちにI_avg, Q_avg
を与えるともNumPy broadcasting
を組み込むため、より効率的なソリューションを実現するために、ネストされたループを交換するnumpy.dot
とmatrix-multiplication
を使用して
def testing(signal):
y = np.arange(0.0108, 0.0135, 0.001) # this one changes over time, set
#to constant for easier reading
x = np.arange(0, (len(signal)))
I_avg = np.zeros(len(y))
Q_avg = np.zeros_like(I_avg)
for i in range(0, len(y)):
I_avg[i] = np.array(signal * (np.cos(2 * np.pi * y[i] * x))).sum()
Q_avg[i] = np.array(signal * (np.sin(2 * np.pi * y[i] * x))).sum()
D = np.power(I_avg, 2) + np.power(Q_avg, 2)
max_index = np.argmax(D)
phaseOut = np.arctan2(Q_avg[max_index], I_avg[max_index])
#just a test signal
def signal_gen():
signal = np.random.random(size=251)
return signal
テストでSは何ですか? – Ohjeah
タイプA、 "信号"と言わなければなりません – Runsiv
max_indexは別のタイプミスです。このコードをテストしましたか? – Ohjeah