【问题标题】:gathering specific rows from each submatrices or cell arrays从每个子矩阵或元胞数组中收集特定行
【发布时间】:2012-11-06 02:29:00
【问题描述】:

我希望从每个子矩阵或元胞数组中收集最后一行。

  • 矩阵名称 A 中有 17 x 20 个单元格。

  • 每个子矩阵的行数不同,但列数相同(共7列,全部)

  • 我尝试生成一个文件,该文件仅由每个子矩阵的最后一行组成。我的目标文件来自

         M = [column1 column2 column3 column4 column5 column6 column7] 
         % made up of last rows of each submatrices, unknown number of lines, 7 columns
    
  • 所以我尝试了

         for x_cc = 1:20
             for y_cc = 1:17
                  M = A{x_cc, y_cc}(end,:);
             end
         end
    
  • 但它不起作用,给出错误下标索引必须是真正的正整数或逻辑。

  • 是否需要先定义尺寸?应该做什么操作?或者什么命令有用?我尝试了 cellfun,但不确定如何在这里使用。

  • 需要任何帮助来解决这种情况。谢谢~!

【问题讨论】:

    标签: matlab for-loop matrix row submatrix


    【解决方案1】:

    首先,您似乎切换了x_ccy_cc。由于您的矩阵为 17 x 20,x_cc 是行数,应为 17,而 y_cc 为 20。

    但是,您遇到的错误可能是由于尝试使用end 对空数组(A 中包含的数组之一)进行索引。此错误的示例:

    a = [];
    
    a(end)
    ??? Subscript indices must either be real positive integers or logicals.
    

    如果您很好奇,避免for 循环的方法如下所示:

    B = cellfun(@(x) x(end,:), A, 'UniformOutput', 0);  
    M = cell2mat(B(:));
    

    这会从 A 中的每个矩阵中获取最后一行,然后将它们垂直堆叠并转换为数组。

    【讨论】:

    • 谢谢~!但是你能告诉我这里的 x 是什么吗?
    • 和 for 循环仍然无法正常工作,虽然我按照你的指示,同样的错误。
    • x 是一个虚拟变量。有点像说“让我们调用 A 'x' 中的每个数组,然后像 x(end,:) 一样对其进行索引。”
    • 谢谢~!但是我的矩阵 A 中有空单元格,这会导致 cellfun 命令出错。如何忽略空单元格?
    • 我一直在尝试想出一种方法来忽略空,但现在,您最好提前删除它们或在尝试索引之前在 for 循环中检查它们进入他们。
    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多