我想同时使用(:)运算符和转置。这可能吗?基本上我想做点什么
output = A'(:)
除了这不起作用。有没有人知道解决方法?
谢谢!
IMMO
答案 0 :(得分:3)
在这种情况下,:
运算符是将矩阵重新整形为向量的简写。您可以通过明确使用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
答案 1 :(得分:2)
尝试:
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