используйте vertcat для получения одномерных данных

предположим, что у нас есть следующие матрицы

>> X=create_matrix1(B,20);
>> [U E V]=svd(X);

то есть у нас есть матрица и мы собираемся делать svd из этой матрицы,тогда понятно что следующая вещь

z=vertcat(U(:,1),U(:,2),U(:,3));

размерность этого вектора

[m,n]=size(z)

m =

   825


n =

     1

следя за вещью

z1=vertcat(U(:,1:3));
[m,n]=size(z1)

m =

   275


n =

     3

Итак, как я могу это исправить? Заранее спасибо EDITED: я хочу объединить, например, первый d левый и правый столбцы матрицы, используя функцию vertcat


person dato datuashvili    schedule 29.04.2014    source источник
comment
vertcat объединяет матрицы, а не столбцы матрицы. Я думаю, что вам нужно U(:).   -  person Luis Mendo    schedule 29.04.2014
comment
нет нет, vertcat также объединяет столбцы матриц   -  person dato datuashvili    schedule 29.04.2014
comment
U(:,1) — столбец матрицы U   -  person dato datuashvili    schedule 29.04.2014
comment
Нет, он не объединяет столбцы матрицы, если вы не вводите эти столбцы как отдельные матрицы. Сравните vertcat([1 1; 1 1]) и vertcat([1; 1],[1; 1])   -  person Luis Mendo    schedule 29.04.2014
comment
Итак, как я могу использовать столбцы как отдельную матрицу с циклом? Как в первом примере, например: z = vertcat (U (:, 1), U (:, 2), U (:, 3));   -  person dato datuashvili    schedule 29.04.2014
comment
Как я уже сказал, z=vertcat(U(:,1),U(:,2),U(:,3)); совпадает с z=U(:);.   -  person Luis Mendo    schedule 29.04.2014
comment
да, но могут быть и другие столбцы, может быть, его матрица имеет 8 столбцов   -  person dato datuashvili    schedule 29.04.2014
comment
U(:) работает независимо от того, сколько столбцов имеет U... Извините, ваш вопрос очень неясен   -  person Luis Mendo    schedule 29.04.2014
comment
нет, нет, друг мой, я хочу соединить по вертикали три столбца моей матрицы   -  person dato datuashvili    schedule 29.04.2014
comment
я не хочу объединять все столбцы, но некоторые из них, скажем, первые 5 столбцов, я могу сделать как vertcat (U (:, 1), U (:, 2), U (:, 3), U (: ,4),U(:,5)), но как я могу использовать цикл?   -  person dato datuashvili    schedule 29.04.2014


Ответы (2)


Вам не нужен цикл, если вы используете reshape:

cols = [1:3];
z1 = reshape(U(:,cols), numel(U(:,cols)), 1);

Вы также можете использовать это для непоследовательных столбцов, например:

cols = [1 2 4 7];

Пример:

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

cols = [1:2];
B = reshape(A(:,cols), numel(A(:,cols)), 1)

Результат:

A =

   1   2   3
   4   5   6
   7   8   9

B =

   1
   4
   7
   2
   5
   8
person beaker    schedule 29.04.2014
comment
что, если мне нужно объединить также столбцы матрицы V - person dato datuashvili; 29.04.2014
comment
z1 = соединенные столбцы U; z2 = конкатенированные столбцы V; z3 = [z1; я2]; Возможно, вы захотите указать все свои требования в исходном вопросе. - person beaker; 29.04.2014

Пытаться:

startRange = 1;
StopRange = 5;
for ii = startRange:stopRange
    col=U(:,ii)
    newmat = [newmat; col]
end
person Justin Fletcher    schedule 29.04.2014
comment
так наконец vertcat или? - person dato datuashvili; 29.04.2014
comment
Нет, строка 5 — это vertcat. :) - person Justin Fletcher; 29.04.2014