#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])