【问题标题】:MATLAB - extracting rows of a matrixMATLAB - 提取矩阵的行
【发布时间】:2011-11-12 08:25:00
【问题描述】:

a = [1 2; 3 4; 5 6]我想提取a的第一行和第三行,所以我有x = [1; 3](行的索引)。

a(x) 不起作用。

【问题讨论】:

  • 如果您一直对这些类型的矩阵运算有疑问,我建议您查看 MATLAB 帮助或在线许多免费教程中的任何一个。如果您去查看 MATLAB 帮助文件,这将是绝对值得投资的几个小时。

标签: matlab indexing


【解决方案1】:

像这样:a([1,3],:)

逗号分隔维度,: 表示“整个范围”,方括号构成一个列表。

【讨论】:

    【解决方案2】:

    在MATLAB中,如果在索引的时候给定一个参数,就是所谓的线性索引。例如,如果您有 4x3 矩阵,则元素的线性索引如下所示,它们按列增长:

    1   5   9
    2   6  10
    3   7  11
    4   8  12
    

    由于您将 [1 3] 向量作为参数传递,因此仅选择了第 1 个和第 3 个元素。

    选择全列或行时,应使用以下格式:

    A(:, [list of columns])  % for whole columns
    A([list of rows], :)     % for whole rows
    

    二维矩阵索引的一般形式:

    A([list of rows], [list of columns])
    

    结果是索引行和列的交叉点中的元素。结果将是 X 标记的元素:

    A([2 4], [3 4 5 7])
    
    . . C C C . C
    R R X X X R X
    . . C C C . C
    R R X X X R X    
    

    参考和一些类似的例子:tutorial on MATLAB matrix indexing

    【讨论】:

    • 这比接受的答案提供的信息要多得多。此外,许多 MATLAB 用户并不熟悉使用向量对每个维度进行索引的机制。 +1。
    【解决方案3】:

    x = a([1 3]) 的行为如下:

    temp = a(:)     % convert matrix 'a' into a column wise vector
    x = temp([1 3]) % get the 1st and 3rd elements of 'a'
    

    【讨论】:

    • 这并不能完全回答问题。 OP 想要由第 1 行和第 3 行索引的所有列,而不是单个元素。 -1.
    【解决方案4】:

    您可以编写一个循环来遍历矩阵的行:

    for i = [1,3]
        a(i,:)
    end
    

    【讨论】:

      【解决方案5】:

      输入:a([1 3],[1 2]) 输出是

      答案= 1 2 5 6

      【讨论】:

      • 这只有在矩阵有两列时才有效。如果您的矩阵有超过 2 列怎么办?虽然我没有给你一个否决票,但你的答案并没有推广到具有任意维度的矩阵,这可能更有用。此外,这个问题已经得到回答,您的回答并没有为已经建立的答案添加任何更有意义的内容。此外,根据您的上述语法,我在同一篇文章中发现了这个答案提供了更多信息:stackoverflow.com/a/19731104/3250829 - 他们实际上是在解释索引到每个维度的向量的作用。
      猜你喜欢
      • 2014-10-18
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 2020-10-10
      相关资源
      最近更新 更多