将包含两列纯(?)double的文件读入复杂的NumPy数组

时间:2018-04-15 13:29:19

标签: numpy

以下几乎提出了相同的问题:

Numpy read complex numbers from text file

Writing and reading complex numbers using numpy.savetxt and numpy.loadtxt

loading complex numbers with numpy.loadtxt

Reading complex data into numpy array

然而,上述涉及略微不同的输入格式,例如括号,而不是此处的文件内容。

考虑一个名为example的文件,其中包含两列 pure(?) double

0.8355544313622164  0
1.199174279986189   0
1.417275292218002   0

我可以通过执行以下操作生成numpy array np.complex64

data = np.loadtxt("./example", dtype=np.float64, delimiter='\t')
complexData = data.T[0] + 1j*data.T[1]

打印complexData现在提供:

[ 0.83555443+0.j  1.19917428+0.j  1.41727529+0.j ... ]

是否有可能将上述方法简化为更简洁的方法?

例如,将数据类型更改为np.complex64会引发TypeError

data = np.loadtxt("./example", dtype=np.complex64, delimiter='\t')

1 个答案:

答案 0 :(得分:1)

而不是使用

将真实数组转换为复数
complexData = data.T[0] + 1j*data.T[1]

您可以创建数据的复杂视图

complexData = data.view(np.complex128)

然后datacomplexData共享浮点数的基础数组,但complexData将这些值解释为复数。

complexData将是一个形状为(n,1)的数组。要摆脱无关的第二维,可以使用

complexData = data.view(np.complex128)[:, 0]

您可以在阅读数据后立即进行转换。例如,我的名为"real.txt"的示例文件是

0.8355544313622164  0
1.199174279986189   0
1.417275292218002   0
3.141592653589793   -1

并且它不是制表符分隔的,所以我将使用默认分隔符。要将数据读取为复杂数据:

In [18]: z = np.loadtxt('real.txt').view(np.complex128)[:, 0]

In [19]: z
Out[19]: array([0.83555443+0.j, 1.19917428+0.j, 1.41727529+0.j, 3.14159265-1.j])