Как преобразовать список списка в CSV-файл в массив NumPy - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть CSV-файл, который выглядит следующим образом

[0.037621960043907166, 0.04622473940253258, 0.9161532521247864]
[0.030109738931059837, 0.03261643648147583, 0.9372738003730774]
[0.030109738931059837, 0.03261643648147583, 0.9372738003730774]

Мне нужно преобразовать это в массив Numpy.Если я использую код ниже

data = genfromtxt(file, delimiter=',', encoding="utf8")

, я получаю nan на выходе.

Если я сделаю это

np.genfromtxt (file, encoding=None, dtype = None)

Не удаляются начальные и конечные скобки списка и выводятся такие данные, как

array = ([['[0.037621960043907166,', '0.04622473940253258,',
        '0.9161532521247864]'],
       ['[0.030109738931059837,', '0.03261643648147583,',
        '0.9372738003730774]'],
       ['[0.030109738931059837,', '0.03261643648147583,',
        '0.9372738003730774]']], dtype='<U22')

ожидаемый вывод

array = ([['0.037621960043907166,', '0.04622473940253258,',
            '0.9161532521247864'],
           ['0.030109738931059837,', '0.03261643648147583,',
            '0.9372738003730774'],
           ['0.030109738931059837,', '0.03261643648147583,',
            '0.9372738003730774']], dtype='<U22')

Как получить ожидаемый результат?Кажется, мне нужно снять скобки 1-й перед применением NumPy операций.Любое предложение?

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Пока вы знаете формат содержимого, я думаю, что простая нарезка будет делать

import numpy as np

tmp = open('tmp', 'r').readlines()
tmp = np.array([[float(num) for num in item[1:-2].split(',')] for item in tmp])
0 голосов
/ 27 сентября 2019

Если у вас есть текстовый файл, например:

[0.037621960043907166, 0.04622473940253258, 0.9161532521247864]
[0.030109738931059837, 0.03261643648147583, 0.9372738003730774]
[0.030109738931059837, 0.03261643648147583, 0.9372738003730774]

Вы можете попробовать это:

np.genfromtxt(filename,dtype=str,encoding=None, converters ={0: lambda s: s.strip('['), 2:lambda s: s.strip(']')}, delimiter = ',')

Вывод:

array([['0.037621960043907166', ' 0.04622473940253258',
        ' 0.9161532521247864'],
       ['0.030109738931059837', ' 0.03261643648147583',
        ' 0.9372738003730774'],
       ['0.030109738931059837', ' 0.03261643648147583',
        ' 0.9372738003730774']], dtype='<U20')
0 голосов
/ 27 сентября 2019

что вам нужно, это eval ()

from numpy import array
with open('your file name', 'r') as f:
    str_lines = f.readLines()
    lines = [eval(x) for x in str_lines]
    ary = array(lines)
f.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...