2016-12-12 2 views
0

Мне нужно прочитать текстовый файл, содержащий значения, разделенные запятыми, в массив 2D numpy. Первые 2 значения в каждой строке содержат значения индекса для массива numpy, а третьи значения содержат значение, которое должно быть сохранено в массиве. В качестве улова значения индекса 1 основаны и должны быть преобразованы в значения индекса, основанные на 0, используемые numpy. Я просмотрел документацию и примеры с использованием genfromtxt и loadtxt, но мне все еще не ясно, как это сделать. Я также попытался следующий код без успеха:Чтение значений из текстового файла в массив 2D numpy с использованием значений индекса из текстового файла

a = np.arange(6).reshape(2,3) 

for line in infile: 
    fields = line.split() #split fields inti list 
    rindex = int(fields[0]) - 1 
    cindex = int(fields[1]) - 1 
    a[rindex,cindex] = float(fields[2]) 

Вот пример входного файла:

1,1,10.1 
1,2,11.2 
1,3,12.3 
2,3,13.4 
2,2,14.5 
2,3,15.6 

А вот мой желаемый выходной массив. В идеале я бы хотел, чтобы он работал с любым размером массива без необходимости предопределять размер массива.

10.1 11.2 12.3 
13.4 14.5 15.6 
+0

'данных = пр .genfromtxt ('path_to_file', converters = {0: lambda x: int (x) - 1, 1: lambda x: int (x) - 1}, delimiter = ","). reshape (2,3) '. – Abdou

ответ

0

Вот один из способов сделать это. numpy.genfromtxt() используется для чтения данных в структурированный массив с тремя полями. Строк и столбцов индексы вытаскивают из структурированного массива и используется, чтобы выяснить форму желаемого массива, и присвоить значения в новый массив, используя Numpy в «фантазии» индексирование:

In [46]: !cat test_data.csv 
1,1,10.1 
1,2,11.2 
1,3,12.3 
2,3,13.4 
2,2,14.5 
2,3,15.6 

In [47]: data = np.genfromtxt('test_data.csv', dtype=None, delimiter=',', names=['i', 'j', 'value']) 

In [48]: data 
Out[48]: 
array([(1, 1, 10.1), (1, 2, 11.2), (1, 3, 12.3), (2, 3, 13.4), 
     (2, 2, 14.5), (2, 3, 15.6)], 
     dtype=[('i', '<i8'), ('j', '<i8'), ('value', '<f8')]) 

In [49]: rows = data['i'] 

In [50]: cols = data['j'] 

In [51]: nrows = rows.max() 

In [52]: ncols = cols.max() 

In [53]: a = np.zeros((nrows, ncols)) 

In [54]: a[rows-1, cols-1] = data['value'] 

In [55]: a 
Out[55]: 
array([[ 10.1, 11.2, 12.3], 
     [ 0. , 14.5, 15.6]]) 
Смежные вопросы