【发布时间】: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]]
我将如何做到这一点?
【问题讨论】:
-
矩阵的每一行是一个向量。您打算如何处理这些数据?
我有一个3xN数据的矩阵,比如:
x = [1,2,3;
4,5,6;
7,8,9]
我希望把它转换成一个 1xN 向量的向量,每一行都是一个向量,比如
y = [[1,2,3];
[4,5,6];
[7,8,9]]
我将如何做到这一点?
【问题讨论】:
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);?
y = num2cell(x, 1)。使用y = num2cell(x),您将获得一个二维单元格数组,其中每个数字都包含在一个单元格中
根据定义,向量或矩阵的元素是标量,向量的向量在 matlab 中是不可能的。您可以改为使用向量元胞数组{[1,2,3];[4,5,6];[7,8,9]}
【讨论】:
在 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] 进行索引。请注意,您现在无法利用原始矩阵在代码中稍后为任何数学运算提供的向量化。
【讨论】: