将numpy数组转换为给定格式的字符串

3
我希望能将一个numpy数组转换为给定格式的字符串表示。
from io import BytesIO
import numpy

data = numpy.random.rand(5)

s = BytesIO()
numpy.savetxt(s, data, "%.15e")
out = s.getvalue().decode()

print(out)

3.208726298090422e-01
6.817590490300521e-01
3.446035342640975e-01
7.871066165361260e-01
4.829308426574872e-01

代码能够正常工作,但是savetxt速度较慢。使用tofile的速度约快两倍,但我不知道如何将其与BytesIO一起使用。也许有其他替代方案。

有什么提示吗?


savetxt根据data中的列数复制%...来创建一个fmt字符串。然后,它使用fmt % tuple(row)进行格式化。Python字符串格式化机制适用于单个数字(以及数字元组),而不是数组。 - hpaulj
只是好奇,使用BytesIO的代替方法,不是使用以字节编码格式保存的.npy文件,即np.save,能完成你的工作吗? - Sayandip Dutta
@SayandipDutta 我不需要文件,我需要字符串。 - Nico Schlömer
1个回答

2
你可以这样做:

import numpy as np

data = np.random.rand(5)
out ='\n'.join(map('{:.15e}'.format, data))
print(out)

输出示例:

2.599889521964338e-02
8.936410392960248e-01
7.074905121425787e-01
4.318334519811902e-01
8.219700656108224e-01

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