我想同时使用 (:) 运算符和转置。这可能吗?基本上我想做类似的事情
output = A'(:)
除了这不起作用。有谁知道解决方法?
谢谢!
伊莫
在这种情况下,:
运算符是将矩阵重塑为向量的简写。您可以通过显式使用该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
尝试:
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
请注意,reshape 会读取沿列访问的矩阵,因此您可能不需要转置矩阵 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