【问题标题】:Return matrices of row and column indices返回行和列索引的矩阵
【发布时间】:2015-12-03 07:01:38
【问题描述】:

我确信这个问题必须在其他地方得到回答,但我似乎找不到答案。

给定一个矩阵 M,返回两个分别包含 M 元素的行索引和列索引的矩阵的最有效/简洁的方法是什么。

例如

M = [1 5 ; NaN 2]

我想要

MRow = [1 1; 2 2]
MCol = [1 2; 1 2]

一种方法是这样做

[MRow, MCol] = find(ones(size(M)))
MRow = reshape(MRow, size(M))
MCol = reshape(MCol, size(M))

但这似乎不是特别简洁和高效。

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    这实质上相当于在行和列索引的可能值上构建规则网格。它可以使用meshgrid 来实现,这比使用find 更有效,因为它避免了构建矩阵并试图“找到”基本上已知的结果。

    M = [1 5 ; NaN 2];
    
    [nRows, nCols] = size(M);
    [MCol, MRow] = meshgrid(1:nCols, 1:nRows);
    

    【讨论】:

    • 在这种情况下使用 find 将是风格不佳的代码。
    • @MatthewGunn 好吧,没错。因为您实际上并不需要 find 任何东西...... :) 在答案中也澄清了这一点。
    【解决方案2】:

    使用meshgrid:

    [mcol, mrow] = meshgrid(1:size(M,2),1:size(M,1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2016-09-16
      • 2012-04-13
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多