我在Python中遇到以下问题。假设numpy.matrix
A的实体dtype
为complex128
。我想以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中读取该文件。
你有什么建议?
答案 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)