私はMatlabからPythonに移行しています。matlabのデータ構造から来るPythonを使用する
Matlabではデータを構造体で構造化しました。 新しいデータセットを取得するために操作したいデータがあります。
私はポンプから測定しています。特定のケースでは22ポイントがありますが、これはもちろんケースごとに異なります。
私はExcelシートのデータを列で構成しています。各データポイントについて、フロー(q)、高さ(h)、トルク(トルク)、および回転数(rpm)があります。私はxlrdを使ってデータを読んでいますが、これはうまくいきます。私は4つのキーで値を持つ辞書を作成します。
特定のデータセットポイントを操作するために使用できるスケーリングルールがいくつかあります。 Matlabでは、私はデータをhydraulic_dataという構造ファイルに編成しました。次に、hydraulic_data.qなどの4つのベクトルがあります。
最初のアプローチは、Pythonでdictを使用していました。ここで問題となるのは、キーの長さが定義されている、つまりリストにデータを追加できないということです。
私は空の辞書を作成しました。入力データと同じ長さのnp.zerosベクトルで埋められます。しかし、これは私にとってはうまくいかないようです。単純化された関数を以下に示す。
def test_for_loop(hydraulic_geometric_scaled):
import math
import numpy as np
no_of_points = len(hydraulic_geometric_scaled['q'])
zero_vector = np.zeros(no_of_points)
q = np.zeros(no_of_points)
h = np.zeros(no_of_points)
torque = np.zeros(no_of_points)
rpm = np.zeros(no_of_points)
hydraulic_scaling_max = {}
hydraulic_scaling_max['q'] = zero_vector
hydraulic_scaling_max['h'] = zero_vector
hydraulic_scaling_max['torque'] = zero_vector
hydraulic_scaling_max['rpm'] = zero_vector
rpm_max=6000
for i in range(no_of_points):
omega = hydraulic_geometric_scaled['rpm'][i]/60*2*math.pi
omega_max = rpm_max/60*2*math.pi
hydraulic_scaling_max['q'][i]= hydraulic_geometric_scaled['q'][i]*(omega_max/omega)
hydraulic_scaling_max['h'][i]= hydraulic_geometric_scaled['h'][i]*(omega_max/omega)**2
hydraulic_scaling_max['torque'][i]= hydraulic_geometric_scaled['torque'][i]*(omega_max/omega)**2
hydraulic_scaling_max['rpm'][i]= omega_max*60/2/math.pi
return hydraulic_scaling_max
これは、各キーに同じ値のhydraulic_scaling_max辞書を返します。 Matlabでは、これはうまく動作しますが、明らかにここでは動作しません。その後、私は同僚と少し話をし、代わりにクラスを使うべきだと彼は提案しました。
私の質問: 1. Matlabの構造体としてdictを使うのは間違った方法ですか? (私は検索しており、明確な答えはないようです)。 2.コードがすべてのキーで同じことを私に与えるのはなぜですか? 3.クラスは最善の方法ですか?
私はPythonを最も使いやすい方法で使い始めることができたらうれしいですね。
「キーの長さが定義されている、つまりリストにデータを追加できないという問題がありますか」を明確にすることはできますか?私はここであなたが何を言っているのか分かりません。あなたが遭遇している問題を見つけるのに役立つかもしれません。 – MarkHarley
@MarkHarley:私は彼がサイズ変更可能でないnumpy配列を参照していると確信しています – TheBlackCat