代码之家  ›  专栏  ›  技术社区  ›  Herpes Free Engineer

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

  •  0
  • Herpes Free Engineer  · 技术社区  · 8 年前

    几乎一样 以下人员提出了问题:

    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 包含 两列 纯(?) 双重的 :

    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复杂64 提高 TypeError :

    data = np.loadtxt("./example", dtype=np.complex64, delimiter='\t')
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Warren Weckesser    8 年前

    而不是将实数数组转换为复数

    complexData = data.T[0] + 1j*data.T[1]
    

    您可以创建一个复合体 看法 数据类型:

    complexData = data.view(np.complex128)
    

    然后 data 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])