Перебор Numpy-массива и нарезка

#arrays #python-3.x #numpy

#массивы #python-3.x #numpy

Вопрос:

Я работаю над определенной задачей, которая использует numpy. У меня есть следующий массив:

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

И у меня есть еще одна переменная с именем B, которая имеет форму (10, 10).
То, что я хочу сделать, это в основном перебирать массив A и выполнять следующее:

 B[1,2]
B[3,4]
B[5,6]
B[7,8]
  

Все они должны возвращать одно число, а не массив numpy.

Я попытался преобразовать массив A в list, а затем выполнить цикл по списку, чтобы взять 2 последовательных элемента. Но мне было интересно, есть ли лучший метод для достижения этой цели.

Спасибо.

Ответ №1:

Вам не нужен цикл

Настройка примера

 A = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
B = np.arange(100).reshape(10,10)
B
  

Выход:

 [[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]
  

Вы можете индексировать с помощью A

 B[A[:,0], A[:,1]]
  

Выход:

 array([12, 34, 56, 78])
  

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

1. Да, спасибо! Это то, что я искал. Индексация Numpy доставляет мне каждый раз.

Ответ №2:

Вы пробовали что-то подобное:

 for i in range(len(A)):
    print(B[A[i][0], A[i][1]])
  

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

1. Да, это работает, я хотел на самом деле проверить результат без использования цикла for (следующий ответ). Спасибо за вашу помощь.