Numpy выбрать строки с несколькими столбцами в качестве критериев

голоса
2

что у вас есть следующий массив

a = np.array([[-1,-2,-3,4],[6,-1,-3,-4],[3,2,5,6]])

и вы хотите, чтобы все строки, где положение 0, 1 и 2 являются <0.

До сих пор я нашел follwing unelegant решения:

b = a[np.logical_and(a[:, 0]<0, a[:, 1]<0, a[:, 2]<0)]

или

c= a[np.where((a[:, 0]<0) * (a[:, 1]<0) * (a[:, 2]<0))]

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

Есть идеи?

Задан 18/07/2017 в 16:14
источник пользователем
На других языках...                            


1 ответов

голоса
3

Вы можете просто использовать:

b = a[np.all(a[:,:3] < 0,axis=1)]

Таким образом , вы можете сначала построить подматрица, используя нарезку a[:,:3] построит матрицу для первых трех столбцов матрицы а. Далее мы используем , < 0чтобы проверить , если все эти элементы меньше нуля.

Затем мы выполним логические и на каждой строке (через операцию колонну вместе). Это будет построить матрицу 1D для каждой строки. Элемент будет , Trueесли все три колонки True. В противном случае это False.

Наконец , мы используем маскирование построить подматрица , где первые три столбца является все меньше 0. Это вероятно , будет работать быстрее , так как число из Numpy вызовов меньше и , таким образом , мы делаем больше работы за звонок.

Ответил 18/07/2017 в 16:19
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more