и NumPy читать.csv с комплексным числом
Stackoverflow,
У меня есть матрица, содержащая комплексные числа (напр. -2.2982235934153075 е-11+2.1179547211742553 электронной версии 9i), что мне нужно импортировать в массив NumPy. Я использую genfromtext(file)
для анализа всех моих других, реальных значений, но я получаю nan
для всех комплексных значений. Есть идеи?
self.raw = (genfromtxt(self.loc, delimiter=',', skip_header=9, dtype=float))
[m,n] = shape(self.raw)
data = zeros((m, n-3))
data[:, :] = self.raw[:, 3::]
Возвращает:
data = array([nan, nan, nan, ...])
3 ответа:
Вы можете сделать:
Обратите внимание, что параметрimport numpy as np a = np.genfromtxt(filename, converters={0: lambda x: x.replace('i','j')}, dtype=str) a = np.complex_(a)
converters
был необходим, поскольку ваш текстовый файл используетi
для обозначения мнимой части.Может быть проще преобразовать ваш текстовый файл извне, чтобы заменить все
i
наj
, избегая сложного аргументаconverters
, Если у вас много столбцов.Если ваш текстовый файл с мнимыми числами имеет формат:
(-2.298223593415307508e-11+2.117954721174255306e-09j) (-2.298223593415307508e-11+2.117954721174255306e-09j) (-2.298223593415307508e-11+2.117954721174255306e-09j) (-2.298223593415307508e-11+2.117954721174255306e-09j) (-2.298223593415307508e-11+2.117954721174255306e-09j) (-2.298223593415307508e-11+2.117954721174255306e-09j) (-2.298223593415307508e-11+2.117954721174255306e-09j)
Где вы можете читать, используя только:
a = np.loadtxt(filename).view(complex)
Например...
Способ, которым мне пришлось это сделать, состоял в том, чтобы сначала
replace('i', 'j')
для всех ячеек в оригинале .csv-файл и сохраните новый, исправленный файл. Потом, читая книгу .csv сdtype=str
вызвал ошибки в последующих вычислениях, но, оказывается, вы можете их разобрать .csv сdtype=complex128
, который решил все мои проблемы. Спасибо за помощь в преобразовании @Saullo-Castro
Импортируйте csv-файл в виде массива строк с помощью
genfromtxt(...)
с помощьюdtype='str'
. Затем вы можете манипулировать каждой записью с помощьюnp.vectorize(...)
.import numpy as np from numpy import genfromtxt # import data as an array of strings using the dtype temp = genfromtxt('matlab_sim_Z.csv', delimiter=',',dtype='str') # perform elementwise conversion to complex numpers mapping = np.vectorize(lambda t:complex(t.replace('i','j'))) data = mapping(temp)
В одной строке:
data = np.vectorize(lambda t:complex(t.replace('i','j'))) (genfromtxt('matlab_sim_Z.csv', delimiter=',',dtype='str'))