Октав / Matlab версия этого цикла для Python - PullRequest
0 голосов
/ 02 октября 2018

Я просто хочу знать, существует ли какой-либо синтаксис, эквивалентный 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, пожалуйста, дайте мне знать.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

В Octave, я полагаю, также в MATLAB вы можете сделать:

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

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

0 голосов
/ 02 октября 2018

Если вы хотите установить серию пикселей в 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,

0 голосов
/ 02 октября 2018

Здесь проще всего будет:

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
...