Экспортировать пустую матрицу комплексных чисел в CSV - PullRequest
0 голосов
/ 23 мая 2018

У меня следующие проблемы в Python.Предположим, что numpy.matrix A с сущностями dtype равно complex128.Я хочу экспортировать A в формате CSV, чтобы записи разделялись запятыми, а каждая строка в выходном файле соответствовала строке 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.

Что вы предлагаете?

1 Ответ

0 голосов
/ 23 мая 2018

Вероятно, это не самый эффективный способ преобразования данных в большую матрицу, и я уверен, что существует более эффективное решение, состоящее из одной строки кода, но вы можете попробовать выполнить приведенный ниже код и посмотреть, работает ли он.Здесь я буду использовать панды для сохранения данных в 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)
...