Версия этого цикла for Python в Octave / Matlab

Я просто хочу знать, есть ли какой-либо эквивалентный синтаксис Octave / Matlab для этого конкретного цикла for в python:

for (i,j) in [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7)]:
    a[i,j] = 1

Мне это нужно, чтобы упростить мои задания по обработке изображений, где я могу легко построить матрицу изображения без необходимости вводить значение каждого пикселя для почти каждого элемента матрицы изображения. Итак, если есть какие-либо другие способы реализации вышеуказанной функциональности в Octave / Matlab, дайте мне знать.

Спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
85
3

Ответы 3

Самым простым здесь было бы:

for i = 1 : 6
   a(i, i+1) = 1; % Alternatively: j=i+1; a(i,j)=1;
end

Более гибкая альтернатива - построение пар:

vals = [1,2; … ; 6,7]; % Your i,j pairs. Possibly even put 3 numbers there, i,j,value.
for i = 1 : size(vals, 1)
   a(vals(i,1), vals(i,2)) = 1;
end

В Octave, я думаю, также в MATLAB вы можете:

for ij = [{1;2} {2;3} {3;4} {4;5} {5;6} {6;7}]
    a(ij{:}) = 1;
end

Но в целом в MATLAB и Python лучше не допускать зацикливания. Как в Python, так и в MATLAB есть много эффективных методов индексации.

Если вы хотите установить для серии пикселей в a, заданной координатами, одно и то же значение, вы можете сделать следующее:

coord = [1,2; 2,3; 3,4; 4,5; 5,6; 6,7];
ind = sub2ind(size(a), coord(:,1), coord(: 2));
a(ind) = 1;

Вы можете заменить последний 1 вектором с таким количеством элементов, как координаты в coord, чтобы присвоить разные значения каждому пикселю.

Обратите внимание, что MATLAB индексирует строки с первым индексом, поэтому первый столбец coord соответствует координате y.

Другие вопросы по теме