Эффективный выбор нескольких значений из 3d numpy

#python #numpy

#питон #numpy

Вопрос:

У меня есть очень большой 3d numpy, из которого я хочу извлечь много значений (x, y, z).

Для простоты предположим, что это numpy:

 import numpy as np
a = np.arange(64).reshape(4,4,4)
  

Из которого я хочу извлечь значения следующего набора точек:

 points = [[3,0,0],[0,1,0],[3,0,1],[2,3,1]]
  

В этом примере ожидаемый результат должен быть:

 [48,4,49,45]
  

Поскольку производительность выше, я хочу избежать повторения, подобного следующему коду:

 points  = [[3,0,0],[0,1,0],[3,0,1],[2,3,1]]
for i in points:
    print(a[i[0],i[1],i[2]])
  

Ответ №1:

Попробуйте это. Использует numpy fancy / расширенную индексацию.

 >>> import numpy as np
>>> a = np.arange(64).reshape(4,4,4)

>>> points = [[3,0,0],[0,1,0],[3,0,1],[2,3,1]]
>>> points = np.array(points)

>>> i = points[:, 0]
>>> j = points[:, 1]
>>> k = points[:, 2]
>>> a[i, j, k]
array([48,  4, 49, 45])