img - массив на выходе
mask - двумерный 256 * 256 numpy массив состоящий из 1 и 0
на выходе должен получится трехмерный массив составленный из mask, но каждый елемент 0 заменён на [0, 0, 0], а 1 на [255, 255, 255]
for i in mask:
gg = []
for x in i:
if x == 0:
gg.append([0, 0, 0])
else:
gg.append([255, 255, 255])
img.append(gg)
Вы поставили тег numpy, кода numpy здесь нет, вопрос. у вас есть массив формы (256,256) а какой формы на выходе должен получится? и еще 1 заменена на [255,255,255] это каждый элемент массива должен быть заменен или по первой оси на 255 по второй оси на 255 и по третьей оси на 255?
Во-первых, нет принципиальной разницы, двумерный или одномерный массив. Но с одномерным чуток проще и быстрее должно быть.
Во-вторых, в любом случае придется перебрать все элементы. Но не все надо обрабатывать!
В-третьих, можно if x == 0: заменить на if not x:
Ну и главное:
Делаем маску одномерной.
Делаем одномерный массив img с нужным количеством [0, 0, 0];
затем проходим по одномерной маске с условием if x: и каждому соответствующему элементу img присваиваем [255, 255, 255]; нули присваивать не надо, пропускаем
Режем одномерный img на кусочки нужного размера (по 256 элементов).
Не уверен что данный код можно как то ускорить
Например можно сменить python на nuitka и компилировать бинарник из получаемого им c++ кода, вот такие простые вещи там однозначно могут быть быстрее, особенно если вручную ковырять
Как частный случая - написать критичный кусок кода на c++/c и вызывать его из питона, но сразу скажу что если по тупому заменить этот кусок на код си, никакого ускорения не получится, может даже ухудшение.
Правильно - разобраться в архитектуре приложения, где такая простая операция становится критичной и требует ускорения. Возможно лучше по другому хранить данные?
Поясни главную задачу, зачем у тебя исходный массив в виде двумерного числового, когда к примеру подошел какой-нибудь битмап (не уверен что это было бы быстрее но попробовать)? Почему надо генерировать итоговый массив таким? куда пойдут эти 3 числа, это описания RGB colors? а потом они все будут инициализироваться?
Python это в принципе не тот язык который работает быстро. Но если есть уже готовый вектор примитивов то его наверное можно процессить их альтернативного API написанного на векторных операциях. И Python будет просто посредником при вызове. Разумеется вне цикла. Arrow. Numpy. Numba. Pandas неважно. Их огромное количество.
Тоесть главная задаа - подготовить структуры данных так чтобы они были applicable к альтернативному API.