【问题标题】:MATLAB: Split arrayMATLAB:拆分数组
【发布时间】:2015-08-02 10:43:04
【问题描述】:

我有一个 Matlab 数组

K=[2, 4, 5, 7, 7.3, 8, 9, 0, 2.1, 5, 7, 3] % 1x12

我需要把它分成三个数组

[K1, K2, K3] = K

在哪里

K1= 1 x 2
K2= 1 x 4
K3= 1 x 6

是否有任何单个内联命令进行这种拆分?

[K1,K2,K3]=split(K,2,4,6)

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    这可能是一种更好的选择,因为您不需要创建任何单独的函数,也不必像其他答案那样手动拆分它。它还具有仅创建单个变量(元胞数组)而不是变量列表的优点。

    使用mat2cell

    out = mat2cell(K,1,splitvec)
    

    输入:

    K = [2, 4, 5, 7, 7.3, 8, 9, 0, 2.1, 5, 7, 3];
    splitvec = [2 4 6];
    

    结果:

    >> celldisp(out)
    
    out{1} =
    
     2     4
    
    out{2} =
    
    5.0000    7.0000    7.3000    8.0000
    
    out{3} =
    
    9.0000         0    2.1000    5.0000    7.0000    3.0000
    

    【讨论】:

      【解决方案2】:

      是的,使用deal

      p1 = 2;
      p2 = 4;
      [K1, K2, K3] = deal(K(1:p1),K(p1+1:p1+p2),K(p1+p2+1:end))
      

      【讨论】:

      • 我想你的意思是[K1, K2, K3] = deal(K(1:p1),K(p1+1:p1+p2),K(p1+p2+1:end))
      • @Ramashalanka 是的,你是对的。我的错。已编辑。
      【解决方案3】:

      你可以写一个(我用splitmat来避免split重载):

      function varargout = splitmat(K,varargin)
      nextpos = 1;
      for argnum = 1:nargin-1
          varargout{argnum} = K(nextpos:nextpos+varargin{argnum}-1);
          nextpos = nextpos + varargin{argnum};
      end
      

      给出输出:

      >> [K1,K2,K3]=splitmat(K,2,4,6)
      K1 =
           2     4
      K2 =
          5.0000    7.0000    7.3000    8.0000
      K3 =
          9.0000         0    2.1000    5.0000    7.0000    3.0000
      

      【讨论】:

      • 如果你想要这种输出K1,K2,K3而不是单个单元格数组,你也可以使用@Santhan的out = mat2cell(K,1,[2 4 6]);然后[K1,K2,K3]=out{:};的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2021-11-06
      • 2011-10-09
      相关资源
      最近更新 更多