Я практикуюсь в том, как использовать функцию as_strided в numpy. Я начал со следующего собственного примера, где я генерирую 5 изображений размером 3 x 3, где каждое изображение заполнено единицами, следующее - двойками и так далее до 5. Если я хочу преобразовать (5,3,3) Volume, чтобы поместить все изображения в одну строку, я могу сделать следующее, и это сработает:
Код: Выделить всё
import numpy as np
from numpy.lib.stride_tricks import as_strided
array_3d = np.empty((5, 3, 3))
for i in range(5):
array_3d[i] = np.full((3, 3), i+1)
print(array_3d.itemsize)
array_2d = as_strided(array_3d, shape=(5, 9), strides=(8*9, 8))
print(array_2d)
Это выведет следующее:
Код: Выделить всё
8
[[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[2. 2. 2. 2. 2. 2. 2. 2. 2.]
[3. 3. 3. 3. 3. 3. 3. 3. 3.]
[4. 4. 4. 4. 4. 4. 4. 4. 4.]
[5. 5. 5. 5. 5. 5. 5. 5. 5.]]
Теперь я хотел попробовать более сложный пример размещения изображений (3, 3) рядом следующим образом с использованием функции as_strided:
Код: Выделить всё
[[1. 1. 1. 2. 2. 2. 3. 3. 3. 4. 4. 4. 5. 5. 5.]
[1. 1. 1. 2. 2. 2. 3. 3. 3. 4. 4. 4. 5. 5. 5.]
[1. 1. 1. 2. 2. 2. 3. 3. 3. 4. 4. 4. 5. 5. 5.]]
Однако я не могу придумать, как сделать это, просто используя функцию as_strided. Поэтому мне интересно, невозможно ли это только с помощью функции as_strided, и как я могу узнать, когда уместно использовать функцию as_strided отдельно от операций скользящего окна.
Подробнее здесь:
https://stackoverflow.com/questions/786 ... d-function