将复数的 numpy 矩阵导出为 CSV

Export a numpy matrix of complex numbers to CSV

我在 Python 中遇到以下问题。假设 numpy.matrix 个实体为 dtype 的 A 为 complex128。我想以 CSV 格式导出 A,以便条目用逗号分隔,并且输出文件中的每一行对应于 A 的一行。我还需要 18 个小数点的实部和虚部精度,并且在一个例如条目我需要这个

`6.103515626000000000e+09+1.712134684679831166e+05j`

而不是

`6.103515626000000000e+09 + 1.712134684679831166e+05j`

以下命令有效,但仅适用于 1×1 矩阵

numpy.savetxt('A.out', A, fmt='%.18e%+.18ej', delimiter=',')

如果我使用:

numpy.savetxt('A.out', A, delimiter=',')

有两个问题。首先,我不知道默认保留了多少个小数点。其次,每个复杂的条目都放在括号中,如

(6.103515626000000000e+09+1.712134684679831166e+05j)

我无法在 Matlab 中读取文件。

你有什么建议?

这可能不是在大矩阵中转换数据的最有效方式,我相信存在更有效的单行代码解决方案,但您可以尝试执行下面的代码,看看是否可行作品。在这里,我将使用 pandas 将数据保存到 csv 文件。生成的 csv 文件中的第一列分别是您的实部和虚部。这里我也假设输入矩阵的维度是Nx1.

import pandas as pd
import numpy as np

def to_csv(t, nr_of_decimal = 18):
    t_new = np.matrix(np.zeros((t.shape[0], 2)))
    t_new[:,:] = np.round(np.array(((str(np.array(t[:])[0][0])[1:-2]).split('+')), dtype=float), decimals=nr_of_decimal)
    (pd.DataFrame(t_new)).to_csv('out.csv', index = False, header = False)

#Assume t is your complex matrix
t = np.matrix([[6.103515626000000000e+09+1.712134684679831166e+05j], [6.103515626000000000e+09+1.712134684679831166e+05j]])    
to_csv(t)