我想同时使用(:)运算符和转置。这个是可能的吗?基本上,我想做一些像这样的事情
output = A'(:)
但这并不起作用。有谁知道解决办法吗?
谢谢!
免疫
发布于 2013-03-23 14:36:24
本例中的:
运算符是将矩阵重塑为向量的简写形式。您可以通过显式使用reshape
函数来解决运算符使用位置的限制:
octave> A = [1 2;3 4]
A =
1 2
3 4
octave> B=A'
B =
1 3
2 4
octave> C=B(:)
C =
1
2
3
4
octave> D=reshape(A',[],1) #% vectorize transpose in one line
D =
1
2
3
4
发布于 2013-03-23 14:40:47
尝试使用:
output = reshape( A.', numel(A), 1);
>> A = rand(4,3);
>> output = reshape( A.', numel(A), 1);
A =
0.447213 0.046896 0.679087
0.903294 0.768745 0.651481
0.701071 0.122534 0.611390
0.535844 0.478595 0.772810
output =
0.447213
0.046896
0.679087
0.903294
0.768745
0.651481
0.701071
0.122534
0.611390
0.535844
0.478595
0.772810
请注意,重塑读取沿列访问的矩阵,因此您可能不需要转置矩阵A。
另外,请记住,运算符'
是厄米特运算符,即转置的共轭运算符,而.'
只是转置,您也可以通过转置(A)获得转置。
您可能希望在一行中完成所有操作,而不必每次都重复键入所有内容。一种解决方案是创建一个函数句柄作为boop:
>> boop = @(x) reshape( transpose(x), numel(x), 1)
>> output = boop(A)
output =
0.447213
0.046896
0.679087
0.903294
0.768745
0.651481
0.701071
0.122534
0.611390
0.535844
0.478595
0.772810
https://stackoverflow.com/questions/15587816
复制