LINUX.ORG.RU

работа с numpy-массивами


0

1

Имеется массив x. Нужно найти все элементы массива x, удовлетворяющие условию (x-i)<2 для x от 1 до N. Ниже три варианта решения. Можно ли сделать быстрее?

x=numpy.array([1.1,2.2,3.3,4.4])
N=100000
t1=time.clock()
y=[]
for i in numpy.linspace(0,1,N):
    y=numpy.r_[ y, x[(x-i)<2] ]
t2=time.clock(); print t2-t1
t1=time.clock()
z=numpy.concatenate(map(lambda i: x[(x-i)<2],numpy.linspace(0,1,N)))
t2=time.clock(); print t2-t1
t1=time.clock()
i=numpy.linspace(0,1,N)
f=numpy.array([ item for item  in x if filter(lambda i_n:item-i_n<2, i) ])
t2=time.clock(); print t2-t1

$ ./test.py 
71.44
0.92
0.69

Ответ на: комментарий от yvv

как применить к данной задачи эти функции (в том числе where) пока не понятно.

Из всех функций применение можно найти функции extract которая == массив[условие]. Но, выгода от ее применения сомнительна:

>>> x=numpy.ones(1000000)
>>> t1=time.clock(); y=x[(x-1)<2]; t2=time.clock(); t2-t1
0.04999999999999999
>>> t1=time.clock(); z=numpy.extract((x-1)<2,x); t2=time.clock(); t2-t1
0.04999999999999999

dmitry-d67
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.