Python 如何使用numpy.savetxt保存和加载复数数组?
我想使用将复数数组保存到文本文件中。问题:Python 如何使用numpy.savetxt保存和加载复数数组?,python,numpy,complex-numbers,Python,Numpy,Complex Numbers,我想使用将复数数组保存到文本文件中。问题: 如果使用默认格式字符串保存复数数组,则会丢弃虚部 如果使用fmt='%s',则除非指定dtype=complex,转换器={0:lambda s:complex},否则numpy.loadtxt()无法加载它。即使如此,如果阵列中存在NaN,加载仍然失败 看起来有人在Numpy邮件列表上询问过这件事,甚至提交了一份申请,但没有得到回复。在我自己整理一些东西之前,有没有一种规范的方法可以做到这一点呢?这是我的解决方案,以防有人从谷歌找到这个问题 保存
- 如果使用默认格式字符串保存复数数组,则会丢弃虚部
- 如果使用
,则除非指定fmt='%s'
,否则dtype=complex,转换器={0:lambda s:complex}
无法加载它。即使如此,如果阵列中存在NaN,加载仍然失败numpy.loadtxt()
看起来有人在Numpy邮件列表上询问过这件事,甚至提交了一份申请,但没有得到回复。在我自己整理一些东西之前,有没有一种规范的方法可以做到这一点呢?这是我的解决方案,以防有人从谷歌找到这个问题 保存:
numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag]))
numpy.savetxt('outfile.txt', array.view(float))
装载:
array_real, array_imag = numpy.loadtxt('outfile.txt', unpack=True)
array = array_real + 1j * array_imag
array = numpy.loadtxt('outfile.txt').view(complex)
我仍然会将复选标记授予更好的解决方案 这样做更简单,只需保存一些临时数组即可将数组重新解释为真实数组 保存:
numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag]))
numpy.savetxt('outfile.txt', array.view(float))
装载:
array_real, array_imag = numpy.loadtxt('outfile.txt', unpack=True)
array = array_real + 1j * array_imag
array = numpy.loadtxt('outfile.txt').view(complex)
如果您希望文件中的实部和虚部位于同一行,可以使用
numpy.savetxt('outfile.txt', array.view(float).reshape(-1, 2))
或
分别
(请注意,无论是view()
还是reformate()
都不会复制数组——它只会以不同的方式重新解释相同的数据。)
提问者的附录:
如果要在同一文件中保存多个复杂数组,可以这样做:
numpy.savetxt('outfile.txt', numpy.column_stack([
array1.view(float).reshape(-1, 2),
array2.view(float).reshape(-1, 2),
]))
array1, array2 = numpy.loadtxt('outfile.txt', unpack=True).view(complex)
重塑是必要的,因为
numpy.view()
不能在跨步阵列上运行。太棒了!短小而优雅。