2012-10-05 67 views
6

對於我來說似乎很簡單,但我仍然缺少一種高效且「乾淨」的方式來將屬於numpy數組的一系列元素(如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

你可以將其轉換爲一個元組:

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

在更一般的情況下,你可以使用一個join

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

這是很好,工作! :) ...所以第二個解決方案實際上是在numpy數組上迭代,非常好。 – gluuke

+0

...但仍然添加一個字符串:'formattedline ='%4s%10.6f%10.6f%10.6f'%(string1,(tuple(aa [ii,:])))'''TypeError:float argument需要,而不是元組「,我不明白爲什麼 – gluuke

+0

@ gluuke你需要添加它們:'(string1,)+ tuple(aa [ii,:])''。 –

2

如果你正在編寫整個數組到一個文件中,使用NP .savetxt:

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

fmt參數可以是單一格式,或一個sequenc e格式,或多格式字符串,如

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

......謝謝!但是如果我不是同時保存整個陣列呢? ...所以如果我添加了一些數組並結合了一些文本? – gluuke

+0

然後我認爲@海頓的建議是最好的。在引擎蓋下,'np.savetxt'調用'fh.write(asbytes(format%tuple(row)+ newline))''。 (在Python2中,'asbytes = str'。) – unutbu

相關問題