Как получить индексы двух верхних значений каждой строки в массиве 2-D numpy, но с указанной c областью исключается? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть двумерный массив, например:

p = np.array([[21,2,3,1,12,13],
             [4,5,6,14,15,16],
             [7,8,9,17,18,19]])
b = np.argpartition(p, np.argmin(p, axis=1))[:, -2:]  
com = np.ones([3,6],dtype=np.int)
com[np.arange(com.shape[0])[:,None],b] = 0
print(com)

b - это индексы двух верхних значений каждой строки в p:

b = [[0 5]
    [4 5]
    [4 5]]

com - это np.ones матрица того же размера, что и p, элемент с индексом, равным b, изменится на 0. Итак, результат:

com = [[0 1 1 1 1 0]
      [1 1 1 1 0 0]
      [1 1 1 1 0 0]]

Теперь у меня есть еще одно ограничение:

p[0:2,0:2]

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

b = [[4 5]
    [4 5]
    [4 5]]

Как я могу это сделать? Заранее спасибо!

1 Ответ

1 голос
/ 22 апреля 2020

Убедитесь, что ваш вопрос понятен. Не уверен, что понимаю ваши ограничения. Вот дубль:

# the data
p = np.array([[21, 2, 3, 1, 12, 13],
             [4, 5, 6, 14, 15, 16],
             [7, 8, 9, 17, 18, 19]])

# not sure if this is what you mean by constraint
# but lets ignore values in first two cols and rows
p[0:2, 0:2] = 0

# return the idx of highest values
b = np.argpartition(p, -2)[:, -2:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...