2015-05-10 4 views
1

Я могу выбрать строки из массива numpy, где второй элемент равен 7, используя myarray[myarray[:,1]==7]. Как я могу расширить это, чтобы выбрать строки, где второй элемент равен 7 или 9? Например. что-то вроде myarray[myarray[:,1]==7|==9] (очевидно, что это не работает).Выберите из массива numpy по столбцу с несколькими логическими условиями

ответ

1

Используйте a[(a[:,1] == 7) | (a[:,1] == 9)], например:

In [6]: a = np.array([[4,7,8], [6,9,0], [4,4,4]]) 

In [7]: a[(a[:,1] == 7) | (a[:,1] == 9)] 
Out[7]: 
array([[4, 7, 8], 
     [6, 9, 0]]) 

Другой вариант заключается в использовании numpy.logical_or

In [15]: a[np.logical_or(a[:, 1] == 7, a[:,1] == 9)] 
Out[15]: 
array([[4, 7, 8], 
     [6, 9, 0]]) 
+0

Ага, спасибо очень много. –

0

Вы можете использовать np.in1d, если вы хотите, чтобы элегантно включать больше элементов для выбора, как показано в коде и образец пробег следующий вверх.

код -

select_elements_list = [7,9] # Edit this to include more numbers if needed 
row_mask = np.in1d(myarray[:,1],select_elements_list) # mask of valid rows 
myarray_out = myarray[row_mask,:] # Output with selected rows based on mask 

Таким образом, по существу, был бы один вкладыш, как так -

myarray_out = myarray[np.in1d(myarray[:,1],[7,9]),:] 

Пример запуска -

In [15]: myarray 
Out[15]: 
array([[8, 7, 7, 8, 8], 
     [8, 9, 8, 9, 9], 
     [9, 9, 7, 8, 7], 
     [7, 8, 8, 7, 8]]) 

In [16]: myarray[:,1] 
Out[16]: array([7, 9, 9, 8]) 

In [17]: row_mask = np.in1d(myarray[:,1],[7, 9]) 

In [18]: row_mask 
Out[18]: array([ True, True, True, False], dtype=bool) 

In [19]: myarray[row_mask,:] 
Out[19]: 
array([[8, 7, 7, 8, 8], 
     [8, 9, 8, 9, 9], 
     [9, 9, 7, 8, 7]])