2013-09-04 3 views
4

Я пытаюсь загрузить файл 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) 

ответ

5

Похоже, вы спрашиваете, можно ли иметь стандартный 2d-массив, имея также именованные столбцы. Это не так. (По крайней мере, не в том смысле, вы, кажется, спрашивать.)

«массива с именами» является структурированным массивом - это массив из записей (на самом деле не кортежи), каждый из которых по имени поля. Подумайте об этом так: имена не привязаны к массиву, они привязаны к «кортежам» - записям. Тот факт, что данные имеют однородный тип, не имеет значения.

+0

Хорошо, я знал это о массиве записей и т. Д., Но все же я подумал, что возможно иметь массив с именами столбцов. Похоже, что если мне нужен именованный массив, мне нужно написать свой собственный класс или использовать [http://pandas.pydata.org/](Pandas). Кстати, знаете ли вы, есть ли разница в производительности между структурированными массивами и нормальными массивами в numpy? – Pter

+0

Да, я думаю, что Pandas обеспечивает поддержку подобных вещей. Рекордные массивы должны выполнять как обычные, так и обычные массивы для большинства вещей. На самом деле существуют две тесно связанные формы - записи массивов и структурированных массивов - и вы можете прочитать о различии [здесь] (http://wiki.scipy.org/Cookbook/Recarray). Основная скорость, о которой я знаю, включает в себя доступ к атрибутам для массивов записей (что невозможно для структурированных массивов). Если у вас есть массив записей с полем «возраст», вы можете получить доступ к нему следующим образом: 'myarray ['age']' _or_ 'myarray.age'. Но последнее может быть медленным. – senderle