Транспонировать ND список списков - PullRequest
0 голосов
/ 03 июля 2019

1.Я использую cv2.imread для чтения большого изображения в массиве numpy (1234 *1624* 3)

2.Я использую cv2.dnn.blobFromImage, чтобы преобразовать его в (1,3,1234,1624) массив numpy

3. Я использую tolist(), чтобы преобразовать его в список 4D в списках

Моя проблема:

Как переместить ось этого списка

от (1,3,1234,1624) до (1,1234,1624,3)?

Сначала я попытался np.transpose(image, (0, 2, 3, 1)), а затем tolist(), но, похоже, он очень медленный. Поэтому я хочу транспонировать в форме списка.

Я проверил вопрос ниже, он кажется быстрым, но может переносить только 2D-список Транспонировать список списков

Очень ценится!

Обновление:

У меня есть список с именем temp.

len(temp)=1 len(temp[0])=3 len(temp[0][0])=1234 len(temp[0][0][0])=1624

и я хочу перенести его ось на

len(temp)=1 len(temp[0])=1234 len(temp[0][0])=1624 len(temp[0][0][0])=3

Как сделать с temp1=list(map(list, zip(*temp))?

1 Ответ

1 голос
/ 03 июля 2019

Это можно сделать без всяких клочков и чисто функционально, но это не красиво:

from itertools import starmap, repeat

a = np.ones((1,3,1234,1624)).tolist()
b = list(map(list, map(map, repeat(list), map(starmap, repeat(zip), starmap(zip, a)))))
np.shape(b)
# (1, 1234, 1624, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...