Я заполняю трехмерный массив, используя python, каждый элемент массива представляет пиксель.
Значения, которые мне нужно вставить в массив, хранятся в очень большом .txt файле
(56 миллионов строк, отформатированные следующим образом - x, y, z, r, g, b)
сейчас я:
init 3d-массив с нулями.
читать файл построчно.
для каждой строки, содержащей только первые 3 элемента (x, y, z).
вычислить местоположение массива [i, j] из x и y
если массив [i, j] равен нулю -> вставить строку, считанную из файла
иначе перейти к следующему файлу
на 56 миллионов строк у меня уходит около 160 секунд
как можно ускорить это с помощью python? (GPU доступен)
array = np.zeros((height, width), dtype=np.float32)
with open(point_cloud_file) as pc_file:
while True:
line = pc_file.readline()
if not line:
break
nof_read_lines += 1
new_line = line.strip()
try:
x, y, z, _, _, _ = new_line.split(',')
except:
nof_skipped_lines += 1
continue
# insert to array
pixel_x = some calculation
pixel_y = some calculation
if 0 < pixel_x < width and 0 < pixel_y < height:
if array[int(pixel_y), int(pixel_x), 0] == 0:
array[int(pixel_y), int(pixel_x), :] = x, y, z
else:
nof_skipped_lines += 1 # pixel already filled with values