【问题标题】:Cell array of vectors from matrix来自矩阵的向量元胞数组
【发布时间】:2020-02-04 01:07:30
【问题描述】:

我有一个3xN数据的矩阵,比如:

x = [1,2,3;
     4,5,6;
     7,8,9] 

我希望把它转换成一个 1xN 向量的向量,每一行都是一个向量,比如

y = [[1,2,3]; 
     [4,5,6];
     [7,8,9]] 

我将如何做到这一点?

【问题讨论】:

  • 矩阵的每一行一个向量。您打算如何处理这些数据?

标签: matlab matrix vector


【解决方案1】:

num2cell 就是这样做的:

y = num2cell(x, 2); % specify 2nd dimension

结果是一个向量元胞数组:

>> x = [1,2,3; 4,5,6; 7,8,9];
>> y = num2cell(x, 2)
y =
  3×1 cell array
    {1×3 double}
    {1×3 double}
    {1×3 double}
>> celldisp(y)
y{1} =
     1     2     3
y{2} =
     4     5     6
y{3} =
     7     8     9

【讨论】:

  • 啊,谢谢,非常感谢!顺便说一句,您将如何按列而不是按行合并它?只需不提及第二维,或y = num2cell(x, 1);?
  • @Terrornado 您为此使用y = num2cell(x, 1)。使用y = num2cell(x),您将获得一个二维单元格数组,其中每个数字都包含在一个单元格中
【解决方案2】:

根据定义,向量或矩阵的元素是标量,向量的向量在 matlab 中是不可能的。您可以改为使用向量元胞数组{[1,2,3];[4,5,6];[7,8,9]}

【讨论】:

  • 啊对,找向量元胞数组,误会见谅!
【解决方案3】:

在 MATLAB 中,矩阵(或相同类型的数字向量)只能包含标量元素,如您的 x 示例中所示。

要实现您的y,您必须使用单元格数组,可以使用arrayfun 创建:

>> y = arrayfun( @(ii) x(ii,:), 1:size(x,1), 'uni', 0 );
y = 
   {[1 2 3], [4 5 6], [7 8 9]};

您现在需要使用像 y{1} 这样的花括号对 [1 2 3] 进行索引。请注意,您现在无法利用原始矩阵在代码中稍后为任何数学运算提供的向量化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多