Как заставить вектор быть вектором строки? - PullRequest
0 голосов
/ 06 ноября 2018

Какой самый простой способ заставить любой вектор быть вектором строки?

Я хотел бы иметь некоторую функцию, которая преобразует вектор столбца в вектор строки и оставляет вектор строки без изменений. Например:

A= [1 2 3];
RowIt(A)

выведет вектор строки:

1 2 3

и

B= [1; 2; 3];
RowIt(B) 

выведет вектор строки:

1 2 3

Какой самый простой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Просто измените матрицу / вертик в одну строку:

v = reshape(v,1, [])

Это также оставит вектор правильной формы без изменений.

Если перейти к документации по reshape, 1 означает 1 строку, а [] означает столько столбцов, сколько необходимо, учитывая размер v.

Полная функция:

function v = RowIt(v)
    v = reshape(v,1,[]);
end

Сравнение с @Adriaan ответом

Reshape версия:

v = rand(5000*5000, 1);
tic;
for i=1:100000
    b = reshape(v,1, []);
end
toc
Elapsed time is 0.347047 seconds.

(:).' версия: этот ответ

v = rand(5000*5000, 1);
tic
for i=1:100000
    b = v(:).';
end
toc
Elapsed time is 0.082710 seconds

Итак, решение @ Adriaan явно быстрее, возможно, из-за перегрузки вызова функции. Вы должны знать, что никакие данные не копируются во время этой операции, кроме случаев, когда вы изменяете их (MATLAB копирует при изменении), так что в любом случае это действительно быстро.

Преимущество заключается в изменении формы, когда вам нужно настроить что-то вроде:

a = rand(10, 10)
size(reshape(a, 2,[]))

ans =

2    50
0 голосов
/ 06 ноября 2018

Чтобы любой вектор был вектором строки, просто сначала сделайте его вектором столбца, а затем транспонируйте его:

A = rand(3,1);
B = A(:).'; % (:) forces it to unwrap along columns, .' transposes

Вектор строки разворачивается в вектор столбца, а затем снова переносится в вектор строки, а вектор столбца разворачивается в вектор столбца (таким образом, не изменяется) и затем транспонируется в вектор строки.

Обратите внимание, что любая N-мерная матрица будет принудительно помещена в вектор строки из-за разворачивания столбца:

A = rand(3,3,3,3);
B = A(:).'; % 81 element row vector
0 голосов
/ 06 ноября 2018

Транспонирование:

A= [1 2 3];
A.'

выдаст

1
2
3

Вы также можете написать:

transpose(A)

https://www.mathworks.com/help/matlab/ref/transpose.html

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