2012-10-05 11 views
6

それは私には些細やめたようだが、私はまだであることをフォーマットされた文字列に(aa[:,:]として)numpyの配列に属する元素のシリーズを挿入するために効率的かつ「クリーン」な方法が欠落しています印刷された/書かれた。 事実のような拡張要素ごとの仕様構文:フォーマットされた文字列は

formattedline= '%10.6f %10.6f %10.6f' % (aa[ii,0], aa[ii,1], aa[ii,2]) 
file1.write(formattedline+'\n') 

が働いています。当然の

formattedline= '%10.6f %10.6f %10.6f' % (float(aa[ii,:])) 
file1.write(formattedline+'\n') 

が与える:ので

しかし、私は、他の短い解決策を見つけていないTypeError: only length-1 arrays can be converted to Python scalars

かを:

formattedline= '%10.6f %10.6f %10.6f' % (aa[ii,:]) 
file1.write(formattedline+'\n') 

ができます:TypeError: float argument required, not numpy.ndarray。 私はイテレータを試しましたが、成功しませんでした。

もちろん、印刷する要素がいくつかある場合は、これは興味深いことです。

だから:どのように私は、numpyの配列と文字列の書式設定のファッションの反復処理を組み合わせることができますか?

答えて

5

あなたはタプルに変換することができます:あなたはjoinを使用することができ、より一般的なケースでは

formattedline = '%10.6f %10.6f %10.6f' % (tuple(aa[ii,:])) 

formattedline = ' '.join('%10.6f'%F for F in aa[ii,:]) 
+0

のような形式の文字列を使用してください。 :) ... 2番目の解決策は実際には非常に素敵な配列を反復処理しています。 – gluuke

+0

...しかし、まだ1つの文字列を追加しています: 'formattedline = '%4s%10.6f%10.6f%10.6f'%(string1、(aa [ii、:])))' 'TypeError:float引数必要ではない、タプル 'と私は理由を理解していません – gluuke

+0

@ gluukeそれらを追加する必要があります:'(string1、)+タプル(aa [ii、:]) '。 –

2

ファイルに配列全体を記述している場合、NPを使用します.savetxt:

np.savetxt(file1, aa, fmt = '%10.6f') 

fmtパラメータは、単一のフォーマット、またはsequencすることができます複数の形式の文字列、または

'%10.6f %5.6f %d' 
+0

...ありがとう!しかし、アレイ全体を同時に保存しないのはどうですか? ...配列のスライスをテキストと組み合わせて追加する場合は? – gluuke

+0

それから、私は@ haydenの提案が一番良いと思います。フープの下で、 'np.savetxt'は' fh.write(asbytes(format%tuple(row)+ newline)) 'を呼び出します。 (Python2では、 'asbytes = str'。) – unutbu

関連する問題