强制任何向量为行向量的最简单方法是什么?
我希望有一些函数可以将列向量转换为行向量,并保持行向量不变。例如:
A= [1 2 3];
RowIt(A)
将输出一个行矢量:
1 2 3
和:
B= [1; 2; 3];
RowIt(B)
将输出一个行矢量:
1 2 3
最简单的方法是什么?
要使任何向量成为行向量,只需先强制它成为列向量,然后转置它:
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
只需将矩阵/向量重塑为一行:
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
转座:
A= [1 2 3];
A.'
将输出
1
2
3
你也可以写:
transpose(A)
https://www.mathworks.com/help/matlab/ref/transpose.html