У меня есть матрица данных 3xN, таких как:

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

Я хочу преобразовать его в вектор векторов 1xN, где каждая строка является вектором, например

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

Как бы я сделал это?

0
Terrornado 3 Фев 2020 в 19:59

3 ответа

Лучший ответ

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
3
Luis Mendo 3 Фев 2020 в 17:07

Элементы вектора или матрицы по определению являются скалярами, вектор векторов невозможен в Matlab. Вместо этого вы можете использовать массив ячеек векторов {[1,2,3];[4,5,6];[7,8,9]}

1
Daniel 3 Фев 2020 в 17:04

В 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]. Обратите внимание, что теперь вы не можете использовать векторизацию, которую оригинальная матрица могла предложить для любых математических операций, которые будут выполняться позже в вашем коде.

1
Wolfie 3 Фев 2020 в 17:05