【问题标题】:Mapping values of matrix in MATLABMATLAB中矩阵的映射值
【发布时间】:2014-05-12 10:30:54
【问题描述】:

假设我有一个名为 A 的矩阵。 矩阵的值代表坐标, 所以第 2 行第 3 列是二维平面图中的坐标 (2,3)。

如何将矩阵的所有值映射到不同的索引,以便(0,0) 获得 0 等的映射值?

(0,0) -> 0
(0,1) -> 1
(0,2) ->2
..
..

等等。

谢谢。

【问题讨论】:

  • MATLAB 没有 0 作为索引。

标签: matlab indexing mapping coordinates indices


【解决方案1】:

在 MATLAB 中,您可以index matrices linearly。假设你有矩阵:

a =    
   16    2    3   13
    5   11   10    8
    9    7    6   12
    4   14   15    1

现在,您可以使用普通下标或使用线性等效项来访问位置 (3,2) 中的元素。

a(3,2)
ans = 7

a(7)
ans = 7

假设您的索引是从 1 到 numel(a) 的列表,并且实际上并不需要 (3,2)(7) 之间的链接,这将是最简单的方法。

正如您所说,您希望位置 (0,0) 的元素具有索引 (0)。由于 MATLAB 索引从 1 开始,您有两种选择:

如果你得到一个列表(例如来自另一个程序),其中元素从零到(numel(a) - 1),例如ind = [0, 3, 6, 8],我的建议是你只需使用ind = ind + 1(或者ind_1 = ind + 1,如果你不这样做'不想覆盖原来的向量。

否则你可以这样每次加一个:x = a(ind + 1);

但是,如果您真的想要 (3,2)(7) 之间的链接,我相信 sub2ind 是要走的路。

【讨论】:

    【解决方案2】:

    sub2ind 命令确定一组下标值对应的等效单索引。”

    例如,如果

    i = sub2ind(size(A), 2, 3);
    

    然后

    A(2,3)A(i) 指代矩阵A 中的相同元素。

    【讨论】:

      【解决方案3】:

      假设您对以 1 开头的 MATLAB 索引没问题,这将起作用 -

      A1 = reshape([1:numel(A)],size(A,1),[])'
      

      如果您想从0 开始映射,只需减去1 -

      A1 = reshape([1:numel(A)],size(A,1),[])' -1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-16
        • 2019-02-03
        • 2018-12-02
        • 2014-08-06
        • 2019-03-03
        • 1970-01-01
        • 1970-01-01
        • 2019-03-31
        相关资源
        最近更新 更多