numpy数组的Python列表式字符串表示

2024-09-29 00:13:45 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑一下有几个相当长的numpy数组:

importy numpy as np;
long_array1 = np.array([random.random() for i in range(10000)]);
long_array2 = np.array([random.random() for i in range(10000)]);
long_array3 = np.array([random.random() for i in range(10000)]);

我想将数组保存到文件file.dat,每个numpy数组一行。 数组的文本表示应采用类似python数组的格式,即在以下numpy数组的情况下:

^{pr2}$

我想在文件中保存以下行。在

[0.3213,0.145323,0.852,0.723,0.421452]

我要做的是:

array1_str = ",".join([str(item) for item in long_array1]);
array2_str = ",".join([str(item) for item in long_array2]);
array3_str = ",".join([str(item) for item in long_array3]);

with open("file.dat","w") as file_arrays:
    file_arrays.write("[" + array1_str + "]\n");
    file_arrays.write("[" + array2_str + "]\n");
    file_arrays.write("[" + array3_str + "]\n");

其实一切都很好。我只是怀疑代码的效率。我几乎可以肯定,必须有另一种(更好、更高效)的方法来做到这一点。 我也欢迎对随机列表生成发表评论。在


Tags: innumpyfornprandom数组itemarray
3条回答

既然您需要类似Python列表的格式,那么实际使用Python列表格式怎么样?在

array1_str = repr(list(long_array1))

这将主要停留在C-land,性能应该会更好。在

如果你不想要这些空间,那就在下列时间之后把它们取出来:

^{pr2}$

然而,内存使用可能是个问题。在

这是最快的方法:

','.join(map(str, long_array1.tolist()))

如果您想让文本更紧凑,这也很快:

^{pr2}$

来源:作为pycollada库的维护者,我对所有可能的方法进行了基准测试。在

听起来你也许可以用^{}来做这个

比如:

def dump_array(outfile, arraylike):
    outfile.write('[')
    numpy.savetxt(outfile, arraylike, newline=',', fmt="%s")
    outfile.write(']\n')

虽然我不认为相应的numpy.loadtxt()能够以这种格式读取。在

相关问题 更多 >