Получение матрицы строк - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу преобразовать матрицу n * n в соответствующую ей матрицу строк в Matlab. Как этого добиться?

Например, предположим, что исходная матрица равна

7.0000   26.0000    6.0000   60.0000   78.5000

1.0000   29.0000   15.0000   52.0000   74.3000

11.0000    56.0000    8.0000   20.0000  104.3000

и я хочу получить вывод как

7,0000 26,0000 6,0000 60,0000 78,5000 1,0000 29,0000 15,0000

52,0000 74,3000 11,0000 56,0000 8,0000 20,0000 104,3000

которая является строкой матрицы.

Ответы [ 4 ]

0 голосов
/ 30 апреля 2018

Предположим, что ваша исходная матрица A (которая имеет 15 элементов)

A = [7.0000   26.0000    6.0000   60.0000   78.5000;

1.0000   29.0000   15.0000   52.0000   74.3000;

11.0000    56.0000    8.0000   20.0000  104.3000]

Теперь вам нужно изменить форму А, чтобы она стала вектором строк.

reshape(A,1,[]) % Here 1 means you need one row, and [] means you need is as vector

Если вам нужен вектор-столбец, вы можете использовать следующее

reshape(A,[],1) % this gives a column vector

Однако, согласно вашей цели, следующий код выполнит работу

A = [7.0000   26.0000    6.0000   60.0000   78.5000;

1.0000   29.0000   15.0000   52.0000   74.3000;

11.0000    56.0000    8.0000   20.0000  104.3000];

reshape(A,1,[])

Выход будет

ans =

7.0000    1.0000   11.0000   26.0000   29.0000   56.0000    6.0000   15.0000    8.0000   60.0000   52.0000   20.0000   78.5000   74.3000  104.3000

Для получения подробной информации введите следующее в командном окне

help reshape
0 голосов
/ 30 апреля 2018

Самое простое решение:

Anew = reshape(Aold',1,numel(Aold));

Особое значение имеет то, что вам нужно использовать транспонирование Aold.

0 голосов
/ 30 апреля 2018

Поскольку вы хотите преобразовать его в вектор, reshape может быть немного излишним, так как вы можете просто использовать линейное индексирование.

A = randi(10,5,5); %Create some matrix
B=A.'; %SLOW
B = B(:).'; %matrix -> vector conversion

С другой стороны, скорость преобразования матрицы -> вектора на самом деле не имеет значения, поскольку это медленная начальная транспонирование, которое вам понадобится для любого метода, см., Например. Фил ответ.

0 голосов
/ 30 апреля 2018

Я думаю, что вы хотите:

reshape(A, 1, []);

где A - ваша матрица. Например:

A = rand(5,5);
b = reshape(A, 1, []);

даст вам матрицу 1x25.

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