【问题标题】:Update : Merge two arrays Matlab更新:合并两个数组 Matlab
【发布时间】:2014-04-30 14:46:28
【问题描述】:

这是问题Merge two arrays Matlab的更新版本

假设现在两个数组是

    A1 = [x1 y1
          x2 y2
          x3 y3
          0  0
          0  0
          0  0
          0  0
          0  0
              ]

   A2 = [a1 b1
          a2 b2
          a3 b3
          a4 b4
          0  0
          0  0
          0  0
              ]

现在,如何以最短的方式合并 A1 和 A2,这样

   A = [x1 y1
        x2 y2
        x3 y3
        a1 b1
        a2 b2
        a3 b3
        a4 b4
        0  0]

之前的答案是正确的,它删除了所有的零。但是如何通过 indexing 以最短的方式实现这一点,类似于之前的答案?

更新:

这是我尝试过的 使用上一个问题的答案

    A=[A1(max(A1')>0,:);A2(max(A2')>0,:)]
    A = padarray(A,[size(A1,1) - size(A,1) 0],'post')

这很简单,但正如我在问题中明确提到的那样,是否有像上一个问题一样可以实现这一目标的单行答案或命令?我的主要目标是扩展我的知识库,了解如何有效地利用 matlab 的索引优势,并为遇到这个问题的其他人以及可能有很多建议的人提供指导。

谢谢, LN

【问题讨论】:

  • 最后零的数量是如何确定的?
  • 只有A1大小。请检查 A1 和 A2 的尺寸。
  • 好吧,这看起来像是您之前问题的一个非常微不足道的扩展。你为什么不自己想办法解决,然后在这里问是否有问题?
  • 我试过了,还有很长的路要走。我是这个@Acorbe 的新手,exp 索引数组并且面临截止日期。所以无法尝试新事物。很抱歉,如果我要求太多。
  • 请检查编辑@Peter 我希望能够说服你们我尝试了一些东西。

标签: arrays matlab


【解决方案1】:

怎么样:

A2(length(A1),2) = 0;
A = A1 + circshift( A2,find(A1(:,1),1,'last'))

【讨论】:

    【解决方案2】:

    thewaywewalk 的答案是:

    A = zeros(size(A1)); 
    A(1:nnz([A1;A2])/2,:) = reshape(nonzeros([A1;A2]),[],2)
    

    【讨论】:

      【解决方案3】:

      基于 Robert P. 的回答(因为 OP 要求单行回答):

      A = [reshape(nonzeros([A1;A2]),[],2); zeros(size(A1,1) - nnz([A1;A2])/2, 2)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-31
        • 2015-06-20
        相关资源
        最近更新 更多