Сжатие трехмерной матрицы в массив векторов с индексами в векторе - PullRequest
0 голосов
/ 14 марта 2020

Итак, у меня есть массив numpy размера (w, h, d), где w - ширина изображения, h - высота изображения, d - его размер.

Моя цель - превратить это в список векторов для всех пикселей (то есть список размера w * h) и сделать так, чтобы индексы были упакованы вместе с пикселем.

Так по существу [[i, j, r, g, b], [i, j, r, g, b], ...] где ij - координаты пикселя. Я сделал это, используя al oop, но я пытаюсь сделать это без al oop эффективным numpy способом.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Вы можете сделать следующее: Приведя пример ввода: a=np.random.randint(4,size=(5,4,3)),

, вы можете сначала преобразовать его в двумерный массив размером (wh,d):

b=a.reshape((a.shape[0]*a.shape[1],a.shape[2])) 

Далее вы можно использовать списочные выражения, маршируя по массиву b:

 [np.concatenate(([i%a.shape[0],int(i/a.shape[0])],c)) for i,c in enumerate(b)]
0 голосов
/ 15 марта 2020

Вот способ использования только numpy функций и без циклов.

a = np.random.randint(4,size=(5,4,3))

# be careful with a.shape[1] coming first
x, y = np.meshgrid(range(a.shape[1]), range(a.shape[0]))
res = np.concatenate((x[:,:,None], y[:,:,None], a), axis = 2)
res = res.reshape(-1, a.shape[2]+2)

print(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...