Найти 2d координаты (строка, столбец) верхних 'n' элементов в 2d массиве, а затем использовать эти координаты для выполнения операций над другим массивом с использованием python? - PullRequest
0 голосов
/ 12 апреля 2019

См. Приведенный ниже пример, чтобы лучше понять мой вопрос.

Предположим, это два массива A и B:

A=array([[1,2,3,4],
         [5,6,7,8],
         [9,10,11,12]])

B=array([[3,4,12,2],
         [5,11,1,6],
         [9,10,7,8]])

В B найдите координаты 5 верхних элементов (12,11,10,9,8) в нем.

ожидаемый результат1:

coordinates=(0,2)
            (1,1)
            (2,1)
            (2,0)
            (2,3)

Теперь я хочу умножить элементы, чьи позиции находятся в координатах (0,2), (1,1), (2,1), (2,0), (2,3) в A, на 10.

Тогда ожидаемый результат2 будет:

[30,60,100,90,120]

Я совершенно новичок в программировании на Python. Пожалуйста, помогите мне в достижении моего требования.

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Для больших массивов argpartiton будет более эффективным:

A=np.random.rand(100,100)
B=np.random.rand(100,100)

%timeit A.ravel()[np.argpartition(B,B.size-5,None)[-5:]] * 10
459 µs ± 37.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit A.ravel()[B.ravel().argsort()[-5:][::-1]] * 10
2.85 ms ± 34.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
1 голос
/ 12 апреля 2019

Использование numpy.array.ravel с numpy.array.argsort:

A.ravel()[B.ravel().argsort()[-5:][::-1]] * 10

Выход:

array([ 30,  60, 100,  90, 120])
0 голосов
/ 12 апреля 2019

код для получения ожидаемого результата 1 :

C=(B.ravel().argsort()[-5:][::-1])
cord=(np.unravel_index(C, B.shape))

Выход :

(array([0, 1, 2, 2, 2], dtype=int64), array([2, 1, 1, 0, 3], dtype=int64))

## here 1st array gives the row coordinates and 2nd array gives the column coordinates of top 5 elements in B. In order.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...