【问题标题】:formatted string of series of numpy array elements一系列 numpy 数组元素的格式化字符串
【发布时间】:2012-10-05 19:53:12
【问题描述】:

这对我来说似乎微不足道,但我仍然缺少一种有效且“干净”的方法来将一系列属于 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: 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 数组和字符串格式的迭代结合起来?

【问题讨论】:

    标签: python arrays numpy formatted-text


    【解决方案1】:

    您可以将其转换为元组:

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

    在更一般的情况下,您可以使用join

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

    【讨论】:

    • 这很好而且工作! :) ...所以第二个解决方案实际上是迭代numpy数组,非常好。
    • ...但是,添加一个字符串:formattedline= ' %4s %10.6f %10.6f %10.6f' % (string1, (tuple(aa[ii,:]))) 给出了TypeError: float argument required, not tuple,我不明白为什么
    • @gluuke 你需要添加它们:(string1,)+tuple(aa[ii,:]).
    【解决方案2】:

    如果要将整个数组写入文件,请使用 np.savetxt:

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

    fmt 参数可以是单一格式,也可以是一系列格式,也可以是多格式字符串,如

    '%10.6f  %5.6f  %d'
    

    【讨论】:

    • ...谢谢!但是如果我没有同时保存整个数组呢? ...那么,如果我要添加与一些文本相结合的数组切片?
    • 那么我认为@hayden 的建议是最好的。在后台,np.savetxt 调用 fh.write(asbytes(format % tuple(row) + newline))。 (在 Python2 中,asbytes = str。)
    猜你喜欢
    • 2014-11-02
    • 2020-08-07
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多