Matlab 使用vertcat使用索引数组连接矩阵的列

Matlab 使用vertcat使用索引数组连接矩阵的列,matlab,matrix,concatenation,Matlab,Matrix,Concatenation,假设我们有下面的随机矩阵 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

假设我们有下面的随机矩阵

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
我们对这个矩阵进行了奇异值分解

[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))我更改了一些内容,以便直接得到我想要的结果?

当您查看:

 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(:);
当你看到:

 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(:);
当你看到:

 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(:);
当你看到:

 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(:);

这应该能奏效

z1 = U(:,b);
z1 = z1(:);

这应该能奏效

z1 = U(:,b);
z1 = z1(:);

这应该能奏效

z1 = U(:,b);
z1 = z1(:);

这应该能奏效

z1 = U(:,b);
z1 = z1(:);

您所做的是正确的,但您必须在最后一步使用重塑功能,如下所示:

z1 = reshape(Z1,1,18);

您所做的是正确的,但您必须在最后一步使用重塑功能,如下所示:

z1 = reshape(Z1,1,18);

您所做的是正确的,但您必须在最后一步使用重塑功能,如下所示:

z1 = reshape(Z1,1,18);

您所做的是正确的,但您必须在最后一步使用重塑功能,如下所示:

z1 = reshape(Z1,1,18);


是的,这就是为什么我会问,在这种情况下我该怎么做?我们的想法是,我们可以自动选择我想要的列,所以请?我不明白你的问题。您想要得到结果(
6x3
),并且询问如何获得结果?或者你想要什么,问题在哪里?不,我想用数组帮助得到18X1的结果,但它给出了6X3ah的维数,你想用b得到它?是的,这就是为什么我问,在这种情况下我该怎么做?想法是我们可以自动选择我想要的列,所以请?我不明白你的问题。您想要得到结果(
6x3
),并且询问如何获得结果?或者你想要什么,问题在哪里?不,我想用数组帮助得到18X1的结果,但它给出了6X3ah的维数,你想用b得到它?是的,这就是为什么我问,在这种情况下我该怎么做?想法是我们可以自动选择我想要的列,所以请?我不明白你的问题。您想要得到结果(
6x3
),并且询问如何获得结果?或者你想要什么,问题在哪里?不,我想用数组帮助得到18X1的结果,但它给出了6X3ah的维数,你想用b得到它?是的,这就是为什么我问,在这种情况下我该怎么做?想法是我们可以自动选择我想要的列,所以请?我不明白你的问题。您想要得到结果(
6x3
),并且询问如何获得结果?或者你想要什么?问题出在哪里?不,我想用数组帮助得到18X1的结果,但它给出了6X3ah的维数,你想用b得到它?我知道,但直接是不可能的?@datodatuashvili请看编辑后的答案,告诉我你是否想要更直接的方法是从这里z1=vertcat(U(:,b));直接接近我知道的,但直接是不可能的?@datodatuashvili请看编辑后的答案,告诉我你是否想要更直接的接近是从这里z1=vertcat(U(:,b));直接接近我知道的,但直接是不可能的?@datodatuashvili请看编辑后的答案,告诉我你是否想要更直接的接近是从这里z1=vertcat(U(:,b));直接接近我知道的,但直接是不可能的?@datodatuashvili请看编辑后的答案,告诉我你是否想要更直接的接近是从这里z1=vertcat(U(:,b));直接方法请看一看我对你的文章所做的编辑。下次提问时请记住这些。把你的句子大写,用“I”代替“I”。请看一下我对你的文章所做的编辑。