如何将向量强制为行向量

  • 本文关键字:向量 arrays matlab vector
  • 更新时间 :
  • 英文 :


强制任何向量为行向量的最简单方法是什么?

我希望有一些函数可以将列向量转换为行向量,并保持行向量不变。例如:

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

相关内容

  • 没有找到相关文章

最新更新