Как удалить столбцы в двумерном массиве, если один элемент меньше или больше определенного значения - PullRequest
0 голосов
/ 06 ноября 2018

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

points = [[-1,-2,0,1,2,3,5,8] [-3,-4,0,-3,5,9,2,1]]

Каждый столбец представляет координату на изображении, например: массив [0] = [-1, -3] означает x = -1 и y = -3

Сейчас я хочу удалить столбцы, у которых либо x меньше 0 && больше 5 или y меньше 0 && больше 5

Я знаю, как удалить элементы определенного значения

#remove x that is less than 0 and more than 5
     x = points[0,:] 
     x = x[np.logical_and(x>=0, x<=5)]

#remove y that is less than 0 and more than 5
     y = points[1,:] 
     y = y[np.logical_and(y>=0,y<=5)]

Есть ли способ удалить y, который имеет тот же индекс, что и удаляемый x? (Другими словами, удалять столбцы, если удовлетворено либо условие удаления x, либо удаление y)

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вы можете использовать np.compress вдоль оси = 1, чтобы получить нужные вам очки:

np.compress((x>=0) * (x<=5) * (y>=0) * (y<=5), points, axis=1)

array([[0, 2, 5],
       [0, 5, 2]])

, где я предположил, что x, y и points являются массивами numpy.

0 голосов
/ 06 ноября 2018

Вы можете преобразовать list в ndarray, затем создать маску логического типа и переназначить x, y. Вложенные logical_and означают, что вы создаете маску x>=0 and x<=5 и y>=0 and y<=5, а затем оператор AND гарантирует, что если один раз x[i] удалено, y[i] также будет удалено

points = [[-1,-2,0,1,2,3,5,8], [-3,-4,0,-3,5,9,2,1]]
x = np.array(points[0,:])
y = np.array(points[1,:])

mask = np.logical_and(np.logical_and(x>=0, x<=5), np.logical_and(y>=0, y<=5))
# mask = array([False, False,  True, False,  True, False,  True, False])

x = x[mask] # x = array([0, 2, 5])
y = y[mask] # y = array([0, 5, 2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...