Я создал массив из стека изображений. Изображения имеют размер 10980 * 10980. Я использовал dask, чтобы читать изображения и складывать их, используя подход ленивых массивов. Всего их 68. Я использовал следующий код:
import dask
import dask.array as da
import glob
import time
import os
filenames = [os.path.join(root, filename) for root, subdir, filenames in os.walk("L2A")
for filename in filenames if filename.endswith("B04_10m.tif")]
print(len(filenames))
import imageio
sample = imageio.imread(filenames[0])
sample.shape
import matplotlib.pyplot as plt
import skimage.io
plt.figure(figsize=(10,10))
skimage.io.imshow(sample[:,:])
lazy_arrays = [dask.delayed(imageio.imread)(fn) for fn in filenames]
lazy_arrays = [da.from_delayed(x, shape=sample.shape, dtype=sample.dtype)
for x in lazy_arrays]
array = da.stack(lazy_arrays, axis=0)
array
Форма массива: Shape (68, 10980, 10980). Однако мне хотелось бы иметь двухмерный массив, сохраняющий размер по оси z (68),который будет в новом 2d-массиве, а измерения 10980 и 10980 (строки и столбцы в 3D-массиве) будут столбцами в новом 2d-массиве. В конце я ищу форму (68, 120560400). Кто-нибудь знает как это сделать? Цель состоит в том, чтобы вычислить среднее значение стека, поскольку выполнение этого с использованием вложенного цикла for для итерации по столбцам и строкам трехмерного измерения будет очень длинным с использованием следующей функции.
x = array.shape[1]
y = array.shape[2]
values = np.empty((x,y), type(array[0][0][0]))
for i in range(x):
for j in range(y):
values[i][j] = ((np.mean(array[:,i,j])))