Ячейка массива векторов из матрицы - PullRequest
0 голосов
/ 03 февраля 2020

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

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

I wi sh, чтобы преобразовать ее в вектор векторов 1xN, где каждая строка представляет собой вектор, например

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

Как бы я совершил sh это?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2020

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
1 голос
/ 03 февраля 2020

В MATLAB матрицы (или числа c векторов, поскольку они одного типа) могут иметь только скалярные элементы, как в вашем примере 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 голос
/ 03 февраля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...