открываю TIFF LAB изображение и вернуть большой Numpy массив (4928x3264x3 float64) с помощью питона с помощью этой функции:Разрабатывая очень большой массив в Python
def readTIFFLAB(filename):
"""Read TIFF LAB and retur a float matrix
read 16 bit (2 byte) each time without any multiprocessing
about 260 sec"""
import numpy as np
....
....
# Data read
# Matrix creation
dim = (int(ImageLength), int(ImageWidth), int(SamplePerPixel))
Image = np.empty(dim, np.float64)
contatore = 0
for address in range(0, len(StripOffsets)):
offset = StripOffsets[address]
f.seek(offset)
for lung in range(0, (StripByteCounts[address]/SamplePerPixel/2)):
v = np.array(f.read(2))
v.dtype = np.uint16
v1 = np.array(f.read(2))
v1.dtype = np.int16
v2 = np.array(f.read(2))
v2.dtype = np.int16
v = np.array([v/65535.0*100])
v1 = np.array([v1/32768.0*128])
v2 = np.array([v2/32768.0*128])
v = np.append(v, [v1, v2])
riga = contatore // ImageWidth
colonna = contatore % ImageWidth
# print(contatore, riga, colonna)
Image[riga, colonna, :] = v
contatore += 1
return(Image)
но эта рутинного нужно около 270 секунды, чтобы сделать всю работу и вернуть массив numpy.
Я пытаюсь использовать многопроцессорную обработку, но не могу поделиться массивом или использовать очередь для его передачи, а sharedmem не используется в системе Windows (дома я использую openSuse, но на работе я должен использовать окна).
Кто-то может помочь мне сократить время разработки? Я читал о threadind, чтобы написать какую-то часть на языке C, но я не понимаю, что лучше (и проще) решение ... Я пищевик не настоящий программист :-)
Благодарности
Я не знаю, будет ли он быстрее, но вы можете попробовать использовать 'tifffile' (https://pypi.python.org/pypi/tifffile). Это, безусловно, спасет вас от времени кодирования и отладки. –
Я много искал, но я не нашел lib, способного читать TIFF LAB (с плавающей запятой). Спасибо – dan2cil
@ dan2cil Если вы поделитесь своими входными данными, мы могли бы дать ему шанс улучшить ваш алгоритм. – BPL