以下几乎提出了相同的问题:
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')
答案 0 :(得分:1)
而不是使用
将真实数组转换为复数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])