2013-05-06 4 views
1

У меня есть Numpy массив массивов:Проверка существования массива внутри массива массивов питона

qv=array([[-1.075, -1.075, -3. ], 
     [-1.05 , -1.075, -3. ], 
     [-1.025, -1.075, -3. ], 
     ..., 
     [-0.975, -0.925, -2. ], 
     [-0.95 , -0.925, -2. ], 
     [-0.925, -0.925, -2. ]]) 

И я хочу, чтобы определить, если массив содержится в том, что 2-D массива и возвращает его индекс.

qt=array([-1. , -1.05, -3. ]) 

можно преобразовать оба массива в списки и использовать функцию list.index():

qlist=qv.tolist() 
ql=qt.tolist() 
qindex=qlist.index(ql) 

Но я хотел бы, чтобы не делать этого, потому что я думаю, что это будет удар по производительности.

+0

Не думайте, что это будет удар производительности. измерения. – Elazar

+1

Я буду. Как только становится ясно, как это сделать, используя numpy вместо списков. – Jen

ответ

3

Это должно сделать трюк,

import numpy as np 
np.where((qv == qt).all(-1)) 

Или

import numpy as np 
tol = 1e-8 
diff = (qv - qt) 
np.where((abs(diff) < tol).all(-1)) 

Второй метод может быть более подходящим, когда вопросы точности с плавающей точкой вступают в игру. Кроме того, может быть лучший подход, если у вас есть много qt для тестирования. Например, scipy.spatial.KDTree.

+0

Ура! +1 для соображений с плавающей точкой. Для моего конкретного набора тестов% timeit в ipython показывает, что ваш метод составляет 30,5 нс, против 770 us для метода списка. Благодаря! – Jen

Смежные вопросы