将复数的numpy矩阵导出为CSV

时间:2018-05-23 04:16:29

标签: python matlab csv numpy complex-numbers

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

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

而不是

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

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

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

如果我使用:

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

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

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

我无法在Matlab中读取该文件。

你有什么建议?

1 个答案:

答案 0 :(得分:0)

这可能不是在大矩阵中转换数据的最有效方法,我确信存在更高效的单行代码解决方案,但您可以尝试执行下面的代码并查看它是否有效。在这里,我将使用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)