【问题标题】:Octave/Matlab version of this Python for-loop这个 Python for 循环的 Octave/Matlab 版本
【发布时间】:2019-03-07 05:47:07
【问题描述】:

我只是想知道在 python 中这个特定的 for 循环是否有任何 Octave/Matlab 等效语法:

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

我需要它来减轻我的图像处理任务,我可以轻松地构造图像矩阵,而无需为图像矩阵的几乎每个元素输入每个像素值。所以,如果有任何其他方法可以在 Octave/Matlab 中实现上述功能,请告诉我。

谢谢。

【问题讨论】:

    标签: python matlab for-loop image-processing octave


    【解决方案1】:

    这里最简单的是:

    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
    

    【讨论】:

      【解决方案2】:

      在 Octave 中,我想也在 MATLAB 中,你可以这样做:

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

      但总的来说,在 MATLAB 和 Python 中,最好防止循环。在PythonMATLAB 中都有很多高效的索引方法。

      【讨论】:

        【解决方案3】:

        如果要将坐标给定的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 坐标。

        【讨论】:

          猜你喜欢
          • 2013-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 2021-10-06
          • 1970-01-01
          • 2016-07-01
          相关资源
          最近更新 更多