如何使用 numpy.savetxt 保存和加载复数数组?

发布于 2024-11-17 11:57:14 字数 732 浏览 4 评论 0原文

我想使用 numpy.savetxt() 将复数数组保存到文本文件中。问题:

  • 如果使用默认格式字符串保存复数数组,则虚部将被丢弃。
  • 如果您使用 fmt='%s',则 numpy.loadtxt() 无法加载它,除非您指定 dtype=complex, converters={0: lambda s:复数}。即使如此,如果数组中存在 NaN,加载仍然会失败。

看起来有人询问过这个多个 Numpy 上的时间邮件列表,甚至提交了 bug,但尚未得到回复。在我自己组装一些东西之前,有没有一种规范的方法可以做到这一点?

I want to use numpy.savetxt() to save an array of complex numbers to a text file. Problems:

  • If you save the complex array with the default format string, the imaginary part is discarded.
  • If you use fmt='%s', then numpy.loadtxt() can't load it unless you specify dtype=complex, converters={0: lambda s: complex(s)}. Even then, if there are NaN's in the array, loading still fails.

It looks like someone has inquired about this multiple times on the Numpy mailing list and even filed a bug, but has not gotten a response. Before I put something together myself, is there a canonical way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不打扰别人 2024-11-24 11:57:15

这是我的解决方案,以防有人从谷歌上遇到这个问题。

保存:

numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag]))

加载:

array_real, array_imag = numpy.loadtxt('outfile.txt', unpack=True)
array = array_real + 1j * array_imag

我仍然会将复选标记授予更好的解决方案!

Here's my solution, in case anybody hits this question from Google.

Saving:

numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag]))

Loading:

array_real, array_imag = numpy.loadtxt('outfile.txt', unpack=True)
array = array_real + 1j * array_imag

I will still award the checkmark to a better solution!

北渚 2024-11-24 11:57:14

它更容易并保存一些临时数组,以便将数组重新解释为真正的数组。

保存:

numpy.savetxt('outfile.txt', array.view(float))

加载:

array = numpy.loadtxt('outfile.txt').view(complex)

如果您希望实部和虚部位于文件的同一行,可以

numpy.savetxt('outfile.txt', array.view(float).reshape(-1, 2))

使用或

array = numpy.loadtxt('outfile.txt').view(complex).reshape(-1)

分别

。 (请注意,view()reshape() 都不会复制数组 - 它只会以不同的方式重新解释相同的数据。)

问题的附录提问者:

如果你想在同一个文件中保存多个复杂数组,你可以这样做:

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() 不操作跨步数​​组。

It's easier and saves a few temporary arrays to just reinterpret the array as a real array.

Saving:

numpy.savetxt('outfile.txt', array.view(float))

Loading:

array = numpy.loadtxt('outfile.txt').view(complex)

If you prefer to have real and imaginary part on the same line in the file, you can use

numpy.savetxt('outfile.txt', array.view(float).reshape(-1, 2))

or

array = numpy.loadtxt('outfile.txt').view(complex).reshape(-1)

respectively.

(Note that neither view() nor reshape() copies the array -- it will just reinterpret the same data in a different way.)

Addendum from the question asker:

If you want to save more than one complex array in the same file, you can do it like so:

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)

The reshaping is necessary because numpy.view() doesn't operate on strided arrays.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文