2013-10-25 7 views
2

У меня странная проблема, связанная с функцией numpy's in1d. У меня есть два массива целочисленных значений, представляющих идентификаторы частиц: A & B (идентификаторы уникальны для каждой частицы). Массив A содержит список всех частиц, а массив B содержит список всех частиц, принадлежащих к группе (все частицы в B также находятся в A). То, что я пытаюсь получить, - это индекс всех сгруппированных частиц в массиве A, но по какой-то причине in1d numpy не возвращает правильные результаты. Ниже приведен пример:numpy in1d возвращает неверные результаты?

A = all particle IDs (length of 54480) 
B = all grouped particle IDs (length of 48061) 

простой перебор показывает, что все идентификаторы частиц в пределах B действительно находятся в A. Я также можно сделать:

matches = np.in1d(B,A) 
print len(np.where(matches==True)[0]) 
>> 48061 

, чтобы убедиться, что все, что элементы B присутствуют в A. Теперь нечетная часть, если я делаю

matches = np.in1d(A,B) 
print len(np.where(matches==True)[0]) 
>> 35590 

Я получаю что-то неожиданное. Не должно ли это вернуть 48061 True и 6419 False? Я загрузил A.txt и B.txt в мой Dropbox, если кто-то хочет возиться с этим набором данных (~ 300K каждый). Заранее благодарим за любую помощь, которую вы можете предоставить!

Редактировать: Я должен также упомянуть, что мне нужно, чтобы возвращаемый массив bool был несортирован, поэтому пересечение numpy не может быть и речи.

+3

Проверьте свой массив B, есть только 35590 уникальных индексов. – ngimel

+0

Ahh, я знал, что должен был проверить это! Это то, что я получаю за доверие к программному обеспечению других людей (выход B). Большое спасибо ngimel – Robert

+0

@ngimel Вы можете оставить комментарий в качестве ответа ... –

ответ

1

Проверьте свой массив B, есть только 35590 уникальных индексов.

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