У меня есть 3D-массив и список 3D-индексов. Моя цель - выделить небольшой объем 3D определенного размера (3x3x3 или 5x5x5 или любой другой) для каждого индекса (с индексом, лежащим в середине объема).
На данный момент я делаю это:
1) Сгруппировать пять 2D-массивов (с интересующим посередине, следуя указателям). Таким образом, имея массив 5xNxN.
2) Для объема 5x5x5 для каждого 2D-массива (0, N, N; 1, N, N..etc) моего массива 5xNxN я обрезаю массив 5x5 вокруг того же индекса.
3) Сложите эти пять массивов 5x5 2D, чтобы получить мой маленький объем 3D.
Есть ли самый быстрый способ сделать эту работу?
Вот пояснительный код:
arr = np.zeros((7,7,7)) #Just a 3D array
ind = [3, 3, 3] #My index
for el in range(arr.shape[0]):
if el==ind[0]:
group = arr[el-2:el+3] #it isolates a 3D volume with arr[ind[0]] in the middle
volume_3d = []
for i in group:
volume_2d = i[ind[1]-2:ind[1]+3, ind[2]-2:ind[2]+3]
volume_3d.append (volume_2d) #it builds the 3D volume
Спасибо