2016-10-17 2 views
0

У меня есть матрица numpy, где я храню какой-то ключ в первом элементе каждой строки (или иначе все ключи находятся в первом столбце).Найти номер строки, используя первый элемент строки

[[123,0,1,1,2], 
[12,1,2,3,4], 
[1,0,2,5,4], 
[90,1,1,4,3]] 

Я хочу получить номер строки, поиск по ключевому слову. Я обнаружил, что для этого можно использовать numpy.where, но неясно, как использовать его для получения номера строки. Я хочу что-то вроде

>>numpy.func(myMatrix,90) 
3 

Любая помощь будет оценена.

+1

Если у вас есть ключ и некоторые данные, вы действительно должны использовать словарь, а не список. Поиск элементов в ключе ключа выполняется быстро, поиск по списку медленнее. –

+0

_Row_ number (существительное, относится к положению строки, _'line'_ вашей матрицы) и _raw_ (прилагательное, означает _wild, brute_ или _unedited, unprocessed_) число отличается. Последнее, возможно, даже не является допустимым термином. Полагаю, вы говорите здесь о _row_ номере. – ForceBru

+2

Почему бы не использовать pandas DataFrame? Ваш столбец ключей будет индексом, и есть много способов отбирать, группировать и подмножать ваши данные. – pbreach

ответ

0

Сравните первую колонку с 90 в пределах np.where. Она возвращает массив индексов элементов, равных с 90:

In [3]: A = np.array([[123,0,1,1,2], 
[12,1,2,3,4], 
[1,0,2,5,4], 
[90,1,1,4,3]]) 


In [6]: np.where(A[:,0]==90)[0] 
Out[6]: array([3]) 
1

Согласно online doc, numpy.where если вы даете это только логический массив будет возвращать список координат (один лист на измерение) для элементы, которые являются True. Итак, мы можем получить нужную информацию, захватив первый столбец вашего массива, сравнив его с элементом, который вы хотите найти, и вызовите np.where в этом булевом массиве. Все, что будет выглядеть так:

row,column=np.where(myMatrix[;,0]==90) 
#Note that column will just be 0 here 
Смежные вопросы