Фильтрация через массивы numpy по информации одной строки

#python #arrays #numpy #filter

#python #массивы #numpy #Фильтр

Вопрос:

Я прошу помощи в фильтрации через массивы numpy. В настоящее время у меня есть массив numpy, который содержит следующую информацию:

 [[x1_1, x1_2, ..., x1_n], [x2_1, x2_2, ..., x2_n], [y1, y2, ..., yn]
  

ie. массив по сути представляет собой набор данных, где x1, x2 — это объекты (координаты), а y — выходные данные (значение). Каждая точка данных имеет соответствующие значения x1, x2 и y, так что, например, информация, соответствующая точке данных i, равна x1_i, x2_i и yi.

Теперь я хочу извлечь все точки данных путем фильтрации через y, то есть я хочу знать все точки данных, в которых y> некоторое значение. В моем случае мне нужна информация (все с той же структурой numpy) для всех случаев, когда y> 0. Я действительно не знаю, как это сделать — я играл с логической индексацией, такой как d[0:2,y>0] или d[d[2]>0] , но ничего не добился.

Поясняющий пример:

Учитывая набор данных:

 d = [[0.1, 0.2, 0.3], [-0.1,-0.2,-0.3], [1,1,-1]]
  

Я извлекаю все точки или экземпляры, где y > 0 , т. Е. d[2] > 0 , И он должен возвращать значения:

 [[0.1, 0.2],[-0.1,-0.2],[1,1]]
  

Любые советы или помощь будут оценены.

Ответ №1:

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

 import numpy as np

d = np.array([[0.1, 0.2, 0.3], [-0.1,-0.2,-0.3], [1,1,-1]])
print (d)
[[ 0.1  0.2  0.3]
 [-0.1 -0.2 -0.3]
 [ 1.   1.  -1. ]]

#select last row by d[-1] 
print (d[-1]>0)
[ True  True False]

print (d[:,d[-1]>0])
[[ 0.1  0.2]
 [-0.1 -0.2]
 [ 1.   1. ]]
  

Комментарии:

1. вау, спасибо! Вопрос о последней строке, numpy выполняет поиск по всему массиву, потому что вы сделали :, но выполняет условие из аргументов после запятой? Так это похоже на то, что первый оператор перед запятой фильтрует строки, а второй оператор после запятой фильтрует столбцы?

2. Хммм, более сложный вопрос для меня, потому что я pandas парень больше as numpy , но я думаю : , что это означает выбрать все «строки», а затем отфильтровать «столбцы» по логической маске. Но я не 100% уверен.

3. хорошо, звучит неплохо. Да, pandas кажется лучше, но я использую numpy для ML и pandas для другого анализа данных :).