Mic*_* L. 3 arrays matlab vector
强制任何向量成行向量的最简单方法是什么?
我希望有一些函数将列向量转换为行向量,并保持行向量不变.例如:
A= [1 2 3];
RowIt(A)
Run Code Online (Sandbox Code Playgroud)
将输出行向量:
1 2 3
Run Code Online (Sandbox Code Playgroud)
和:
B= [1; 2; 3];
RowIt(B)
Run Code Online (Sandbox Code Playgroud)
将输出行向量:
1 2 3
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
Adr*_*aan 10
要使任何向量成为行向量,只需先将其强制为列向量,然后转置它:
A = rand(3,1);
B = A(:).'; % (:) forces it to unwrap along columns, .' transposes
Run Code Online (Sandbox Code Playgroud)
行向量被解包到列向量,然后再次转换为行向量,并且列向量被展开到列向量(因此不会改变),然后转换为行向量.
请注意,由于列展开,任何N维矩阵都会以这种方式强制进入行向量:
A = rand(3,3,3,3);
B = A(:).'; % 81 element row vector
Run Code Online (Sandbox Code Playgroud)
只需将矩阵/检查器重新整形为一行:
v = reshape(v,1, [])
Run Code Online (Sandbox Code Playgroud)
它还会保留正确形状的矢量不变.
如果你去上面的文档reshape,1意思是1行,并且[]根据需要给出尽可能多的列的大小v.
全功能:
function v = RowIt(v)
v = reshape(v,1,[]);
end
Run Code Online (Sandbox Code Playgroud)
与@Adriaan回答相比较
Reshape 版:
v = rand(5000*5000, 1);
tic;
for i=1:100000
b = reshape(v,1, []);
end
toc
Elapsed time is 0.347047 seconds.
Run Code Online (Sandbox Code Playgroud)
(:).'版本: 这个答案
v = rand(5000*5000, 1);
tic
for i=1:100000
b = v(:).';
end
toc
Elapsed time is 0.082710 seconds
Run Code Online (Sandbox Code Playgroud)
所以@Adriaan的解决方案显然更快,可能是由于函数调用过载成本.您必须知道在此操作期间不会复制任何数据,除非您修改它(修改时为MATLAB副本),因此无论如何它都非常快.
当您需要自定义内容时,重点是重塑,例如:
a = rand(10, 10)
size(reshape(a, 2,[]))
Run Code Online (Sandbox Code Playgroud)
ans =
Run Code Online (Sandbox Code Playgroud)2 50