将由两列纯(?)double组成的文件读入一个复杂的NumPy数组

将由两列纯(?)double组成的文件读入一个复杂的NumPy数组,numpy,Numpy,以下人员提出了几乎相同的问题: data = np.loadtxt("./example", dtype=np.float64, delimiter='\t') complexData = data.T[0] + 1j*data.T[1] 然而,上述涉及的输入格式(例如括号)与本文中的文件内容稍有不同 考虑一个名为example的文件,其中包含两列纯(?)double: 0.8355544313622164 0 1.199174279986189 0 1.41727529221

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

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

然而,上述涉及的输入格式(例如括号)与本文中的文件内容稍有不同


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

0.8355544313622164  0
1.199174279986189   0
1.417275292218002   0
我能够通过执行以下操作生成
np.complex64
numpy数组

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')

而不是使用

complexData = data.T[0] + 1j*data.T[1]
您可以创建数据的复杂视图:

complexData = data.view(np.complex128)
然后
data
complexData
共享浮点数的底层数组,但
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])