假设我们有以下随机矩阵
a=rand(6,5)
a =
0.8147 0.2785 0.9572 0.7922 0.6787
0.9058 0.5469 0.4854 0.9595 0.7577
0.1270 0.9575 0.8003 0.6557 0.7431
0.9134 0.9649 0.1419 0.0357 0.3922
0.6324 0.1576 0.4218 0.8491 0.6555
0.0975 0.9706 0.9157 0.9340 0.1712
我们已对此矩阵进行了SVD分解。
[U E V]=svd(a);
如果我们想要连接第一,第三和第五列,我们就可以这样做
z=vertcat(U(:,1),U(:,3),U(:,5));
z的尺寸为
[m,n]=size(z)
m =
18
n =
1
但是假设我想要以下内容:我将声明一个包含这些索引或
元素的数组b=[1 3 5]
b =
1 3 5
然后
z1=vertcat(U(:,b));
但尺寸为
[m1 n1]=size(z1)
m1 =
6
n1 =
3
是否有可能在z1=vertcat(U(:,b));
我改变某些东西以便直接给出我想要的结果?
答案 0 :(得分:1)
当你看:
a(:,1) = 0.8147
0.9058
0.1270
0.9134
0.6324
0.0975
你得到一个垂直向量。通过执行vertcat
,您可以垂直添加其他垂直向量,从而生成18x1
向量。
如果您希望将其他列添加为列,则可以使用horzcat
。通过使用作为水平向量的b
,MATLAB相应地改变输出。
由于svd
返回与输入相同维度的矩阵,因此U
也是如此。
的修改
要获得18x1向量作为结果,请使用:
z1=reshape(z1,18,1);
或使用
z1=z1(:);
答案 1 :(得分:1)
这应该可以解决问题
z1 = U(:,b);
z1 = z1(:);
答案 2 :(得分:1)
你所做的是正确的,但你必须在最后一步使用重塑功能,如:
z1 = reshape(Z1,1,18);