Каков наилучший способ чтения столбцовых данных из файла .txt, который содержит комплексные числа? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть текстовый файл формы, показанной на прикрепленном изображении. 5-column data. Colum 0,1: Position coord x,y. Column 3,4,5: Complex fields

с почти 200 точками данных.

Как эффективно их читать в формемассивов, таких что a = array ([2,3, ...]);д = массив ([4 + 5j, 3 + 1j, ....])?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Похоже, ваш текст отформатирован таким образом, что genfromtxt может обработать его без проблем.

Если игнорировать имена столбцов и т. Д., То пример строки будет:

In [235]: txt = """-1.99 -1.99 1.07+0.165j"""

Укажите dtype как плавающее и сложное для соответствующих столбцов:

In [240]: data = np.genfromtxt([txt,txt],dtype=(float,float,complex))
In [241]: data
Out[241]: 
array([(-1.99, -1.99, 1.07+0.165j), (-1.99, -1.99, 1.07+0.165j)],
      dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<c16')])

Результатом является структурированный массив (1d).Доступ к полям осуществляется по имени:

In [242]: data['f0']
Out[242]: array([-1.99, -1.99])
In [243]: data['f2']
Out[243]: array([1.07+0.165j, 1.07+0.165j])

Считыватель CSV Pandas работает быстрее, но, учитывая, что в нем всего 200 точек данных, скорость не составит большого труда.

0 голосов
/ 24 сентября 2018

Используйте панд.

Если пространство между столбцами является табуляцией, то sep='\t', в противном случае используйте решение из Может ли pandas обрабатывать пробелы переменной длины в качестве разделителей столбцов

Предполагая, что этона вкладке код для извлечения третьего столбца комплексных чисел выглядит примерно так:

import pandas as pd

df = pd.read_csv('test.txt',sep='\t',skiprows=3)
df.columns = [f'col_{i}' for i in range(len(df.columns))]

column_2_complex_values = df.col_2.map(complex).values # this is a numpy array
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...