一系列numpy数组元素的格式化字符串

7

对我来说,这似乎很琐碎,但我仍然缺少一种高效且“干净”的方法,将属于numpy数组的一系列元素(如aa[:,:])插入格式化字符串以进行打印/写入。 实际上,扩展的逐个元素规范语法如下:

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: 只有长度为1的数组可以转换为Python标量 或者:
formattedline= '%10.6f  %10.6f  %10.6f' % (aa[ii,:]) 
file1.write(formattedline+'\n')

出现错误:TypeError:需要浮点参数,而不是numpy.ndarray

我已经尝试过迭代器,但没有成功。

当需要打印多个元素时,这当然很有趣。

那么:如何将对numpy数组的迭代和字符串格式化方式结合起来?

2个回答

6
您可以将其转换为元组:
formattedline = '%10.6f  %10.6f  %10.6f' % ( tuple(aa[ii,:]) )

在更一般的情况下,您可以使用 join
formattedline = ' '.join('%10.6f'%F for F in aa[ii,:] )

那很好,而且有效! :) ... 所以第二个解决方案实际上是在迭代numpy数组,非常好。 - gluuke
但是,即使添加了一个字符串:formattedline= ' %4s %10.6f %10.6f %10.6f' % (string1, (tuple(aa[ii,:]))),仍然会出现“TypeError: float argument required, not tuple”的错误,我不明白为什么。 - gluuke
@gluuke,你需要添加它们:(string1,)+tuple(aa[ii,:]) - Andy Hayden

2
如果要将整个数组写入文件,请使用np.savetxt:
np.savetxt(file1, aa, fmt = '%10.6f')
fmt参数可以是单个格式,也可以是格式序列,或者是多格式字符串,例如:
'%10.6f  %5.6f  %d'

谢谢!但是如果我不是同时保存整个数组呢?如果我要添加一些文本和数组的片段呢? - gluuke
那么我认为@hayden的建议是最好的。在底层,np.savetxt调用fh.write(asbytes(format % tuple(row) + newline))。(在Python2中,asbytes = str)。 - unutbu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接