Изменение формы массива 2D в 3D для преобразования TIFF - PullRequest
1 голос
/ 08 января 2020

У меня есть 2D-массив, как показано ниже, где 1,2,3 ... 6 - строки (6), а алфавиты - столбцы (4).

1 - A,B,C,D
2 - E,F,G,H
3 - I,J,K,L
4 - M,N,O,P
5 - Q,R,S,T
6 - U,V,W,X 

Мне нужно изменить этот массив, чтобы 2X3 массив, как упомянуто ниже, таким образом, что если я получу доступ к «1», он должен вернуть алфавиты A, B, C, D

1, 2, 3
4, 5, 6

после изменения формы, я сохраню массив как многополосный tiff.

Я знаю, что это очень простая задача, и я могу сделать это, создав пустой массив и заполнив его, используя циклы for, но я хочу сделать это с помощью функции изменения формы или любого простого метода.

Пожалуйста, помогите мне, ребята.

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Получил ответ по этой ссылке

как сохранить массив, представляющий изображение с 40 полосами, в файл .tif

На самом деле я сохранял файл TIFF, используя Skimage's Команда imsave и skimage могут обрабатывать только 4 канала данных. Следующая команда решит мою проблему.

tifffile.imsave("y.tif", x, planarconfig='contig') ie. band dimension last for contig.
0 голосов
/ 08 января 2020

Ваш формат массива немного вводит в заблуждение. Тем не менее, вот минимальный пример, который я мог бы подготовить:

# example array
arr = pd.np.random.randint(1, 30, 30).reshape(-1, 5)
array([[25, 13, 24, 10, 14],
       [13, 11,  2, 24, 20],
       [16, 28,  5, 12, 24],
       [ 2, 21, 24, 29, 21],
       [21,  5, 18, 23, 23],
       [22,  9, 10, 29,  9]])

# reshape the array by taking first value from each row
np.apply_along_axis(lambda x: x[0], 1, arr).reshape(-1, 3)

array([[25, 13, 16],
       [ 2, 21, 22]])
...