Я пытаюсь перевести эту строку кода из Python в MATLAB:
new_img[M[0, :] - corners[0][0], M[1, :] - corners[1][0], :] = img[T[0, :], T[1, :], :]
Итак, естественно, я написал что-то вроде этого:
new_img(M(1,:)-corners(2,1),M(2,:)-corners(2,2),:) = img(T(1,:),T(2,:),:);
Но это дает мнеследующая ошибка при достижении этой строки:
Запрошенный массив 106275x106275x3 (252,4 ГБ) превышает максимальный размер предпочтительного размера массива.Создание массивов, превышающих этот предел, может занять много времени и привести к тому, что MATLAB перестанет отвечать на запросы.См. Ограничение размера массива или панель настроек для получения дополнительной информации.
Это заставило меня поверить, что это не назначает вещи правильно.Img - самое большее 1000 × 1500 RGB-изображений.Тот же код работает менее чем за 5 секунд в Python.Как я могу сделать векторное присваивание, как код в первой строке в MATLAB?
Кстати, я не вставил все строки своего кода в этот пост, чтобы он не был слишком длинным.Если мне нужно добавить что-нибудь еще, пожалуйста, дайте мне знать.
Редактировать: Вот объяснение того, что я хочу, чтобы мой код делал (в основном, это то, что делает код Python):
Рассмотрим эту строку кода.Это не настоящий код MATLAB, я просто пытаюсь объяснить, что я хочу сделать:
A([2 3 5], [1 3 5]) = B([1 2 3], [2 4 6])
Он интерпретируется так:
A(2,1) = B(1,2)
A(3,1) = B(2,2)
A(5,1) = B(3,2)
A(2,3) = B(1,4)
A(3,3) = B(2,4)
A(5,3) = B(3,4)
...
...
...
Вместо этого я хочу, чтобыинтерпретировать так:
A(2,1) = B(1,2)
A(3,3) = B(2,4)
A(5,5) = B(3,6)