2013-11-17 3 views
3

У меня есть набор данных в виде файла, как показано нижеПропустить строки при чтении данных из файла с помощью numpy.genfromtxt

A 1 
B 2 
C 3 
A 4 
B 5 
C 6 

Я хотел бы извлечь только те строки, которые содержат 'A'. Как мне это сделать с numpy.genfromtxt? Есть ли другая функция, доступная в numpy, которая помогает мне делать то же самое?

ответ

7

numpy.genfromtxt принимает генераторы, так что вы можете цепи genfromtext и ifilter:

from itertools import ifilter 
with open(fname, 'rb') as inp: 
    filtered_inp = ifilter(lambda x: x.startswith('A'), inp) 
    a = np.genfromtxt(filtered_inp) 
+0

Спасибо @alko :) Это должно быть немного быстрее, чем чтение всех данных из файла. Я надеюсь, что numpy придумает прямую реализацию в будущем –

1

Я тоже хотел эту функцию, но ее не существует. Поэтому на данный момент вы, вероятно, должны просто загрузить весь файл в виде матрицы, затем использовать причудливую индексацию для подмножества или удалить части, которые не хотите, и т. Д. Если количество строк, которое вы действительно хотите, очень мало, а общий размер очень велика, вам даже может быть лучше просто перебирать строки в обычном Python.

+0

Ммм, я вижу. Ну, количество строк, которые я хочу, довольно велико. В настоящий момент я загружаю весь файл. –

+0

Тогда у вас теперь, вероятно, так же хорошо, как и до тех пор, пока кто-то не напишет патч для NumPy. –

2

Вы можете прочитать весь файл и фильтр затем с помощью фантазии индексации:

a = np.genfromtxt('test.txt', dtype=str) 

check = (a[:,0]=='A') 
a = a[check] 
Смежные вопросы