2017-04-12 5 views
-1

私はバイナリ値のファイルを持っています。私が探していますセクションでは、私は、このような大きさを計算するとファイルデータから一括計算を改善する方法

temp = array.array("f") 
temp.fromfile(file, length *2) 
mw_mvar = temp.tolist() 

に値を読み取るMW1, MVAR1, MW2, MVAR2,...

のパターンで値を持つ4バイトの整数です。

mag = [0] * length 
for x in range(0,length * 2, 2): 
    a = mw_mvar[x] 
    b = mw_mvar[x + 1] 
    mag[(x/2)] = sqrt(a*a + b*b) 

計算(読まれていない)は、スクリプトの合計の長さを2倍にしています。私は実行時間に無視できる影響でこの計算を行うことができるFortran(pldはFortranで関数dllを呼び出すと言う)を最終的に呼び出すスクリプトを模倣しているので、(理論的に)これをより速く行う方法があることを知っています。

これは私が思いつくことができる最高です。改善のための提案?

私も試してみましたmath.pow()**.5**2違いはありません。

+1

「thermal_mva_results_base」などの用語の定義を省略すると、スニペットが完全ではありません。ファイル 'f'のあなたの説明も弱いです。ファイルの完全な例、ファイルの通常の長さのステートメント、完全なコードスニペットを入力してください。変数の型とデータはあなたの質問に関係します。 –

+0

@RoryDaultonごめん、それはタイプミスでした。私はポストの名前を簡略化し、それを変更しなかった。 – blindguy

答えて

0

計算を改善する運がないので、私は問題を回避しました。計算された値の1%しか必要でないことに気がついたので、必要に応じて計算するクラスを作成しました。結果のコードは、それが計算された値のリストであるかのように機能することが重要でした(私にとって)。プロセスの残りの部分の多くは値を使用し、データの異なるバージョンはあらかじめ計算されています。このクラスは、私は、これはまた、関数内で行うことができるデータ

class mag: 
    def __init__(self,mw_mvar): 
     self._mw_mvar = mw_mvar 
     #_sgn = sgn 
    def __len__(self): 
     return len(self._mw_mvar/2) 
    def __getitem__(self, item): 
     return sqrt(self._mw_mvar[2*item] ** 2 + self._mw_mvar[2*item+1] ** 2) 

PSのバージョンごとに一連の手順を必要とし、両方のバージョンを取ることはありませんを意味します。私は全体のスクリプトにさらに変更を加えなければならなかったでしょう。

function (a,b,x): 
    if b[x]==0: 
     return a[x] 
    else: 
     return sqrt(a[x]**2 + b[x]**2) 
関連する問題