Я пытаюсь загрузить файл csv, состоящий только из типов float.numpy.genfromtxt, кажется, игнорирует dtype
data = np.genfromtxt(self.file,dtype=float,delimiter=self.delimiter,names = True)
но это возвращает массив кортежей. Основываясь на моем поиске, это должно возвращать кортежи только для неоднородных массивов. numpy.genfromtxt produces array of what looks like tuples, not a 2D array—why?. Когда я удаляю names=True
, он действительно возвращает 2d-массив. Можно ли вернуть массив с именами, как это есть в ссылке?
Строка из CSV:
0 _id|1 age|2 unkown|3 male|4 female|5 match-start|6 score
8645632250|7744|0|1|0|1|10
(. Есть несколько столбцов, я просто написал первые шесть из них)
Я также использовал этот код для лучших имен столбцов:
def obtain_data(self):
with open(self.file, 'r') as infile:
first_line = infile.readline()
labels = first_line.split('|')
labels = list(map(trunc_before,labels))
data = np.genfromtxt(self.file,dtype=float,delimiter=self.delimiter,names = labels,skip_header=1)
return data, np.asarray(labels)
Хорошо, я знал это о массиве записей и т. Д., Но все же я подумал, что возможно иметь массив с именами столбцов. Похоже, что если мне нужен именованный массив, мне нужно написать свой собственный класс или использовать [http://pandas.pydata.org/](Pandas). Кстати, знаете ли вы, есть ли разница в производительности между структурированными массивами и нормальными массивами в numpy? – Pter
Да, я думаю, что Pandas обеспечивает поддержку подобных вещей. Рекордные массивы должны выполнять как обычные, так и обычные массивы для большинства вещей. На самом деле существуют две тесно связанные формы - записи массивов и структурированных массивов - и вы можете прочитать о различии [здесь] (http://wiki.scipy.org/Cookbook/Recarray). Основная скорость, о которой я знаю, включает в себя доступ к атрибутам для массивов записей (что невозможно для структурированных массивов). Если у вас есть массив записей с полем «возраст», вы можете получить доступ к нему следующим образом: 'myarray ['age']' _or_ 'myarray.age'. Но последнее может быть медленным. – senderle