如何在MATLAB中交换矩阵的行组?

如何在MATLAB中交换矩阵的行组?,matlab,Matlab,我有一个矩阵a和向量x,如下所示(左侧) 其中S0,H0,…是每个块的行号。我想交换这些块,使S0和S1;H0和H1靠近右侧。这是我的密码 S0=3; H0=2; N0=2; S1=4; H1=5; N1=4; Cols=5; Rows=S0+H0+N0+S1+H1+N1; A=randi(10,[ Rows Cols]); x=randi(10,[Rows 1]); %% Exchange two block temp=A(S0+H0+1:S0+H0+N0,1:end); A(S0+H0+

我有一个矩阵a和向量x,如下所示(左侧)

其中S0,H0,…是每个块的行号。我想交换这些块,使S0和S1;H0和H1靠近右侧。这是我的密码

S0=3;
H0=2; 
N0=2;
S1=4;
H1=5;
N1=4;
Cols=5;
Rows=S0+H0+N0+S1+H1+N1;
A=randi(10,[ Rows Cols]);
x=randi(10,[Rows 1]);
%% Exchange two block
temp=A(S0+H0+1:S0+H0+N0,1:end);
A(S0+H0+1:S0+H0+H1,1:end)=A(S0+H0+N0+S1+1:S0+H0+N0+S1+H1,1:end);
A(S0+H0+N0+S1+1:S0+H0+N0+S1+H1,1:end)=temp;
%% How exchange x

上述代码不起作用。如何在MATLAB中修复它?提前感谢。

我假设您使用的是一个二维矩阵,包含
行和

您可以使用冒号
作为第二个索引来寻址整行,例如第三行:

A(3, :)
(等于
A(3,1:end)
但稍微清晰一点)

因此,您可以将矩阵拆分为几行,并按如下方式重新排列(将这些行重新组合成二维矩阵):

这将移动开头的第3行和第4行,然后移动旧的第1行和第2行,然后移动所有其他行。这对你有帮助吗


提示:您可以使用
eye
进行实验。

我假设您使用的是一个具有
Row
行和
Cols
列的二维矩阵

您可以使用冒号
作为第二个索引来寻址整行,例如第三行:

A(3, :)
(等于
A(3,1:end)
但稍微清晰一点)

因此,您可以将矩阵拆分为几行,并按如下方式重新排列(将这些行重新组合成二维矩阵):

这将移动开头的第3行和第4行,然后移动旧的第1行和第2行,然后移动所有其他行。这对你有帮助吗

提示:您可以使用
eye
进行实验。

使用和的一种方法-

样本运行-

输入:

A =
     6     8     9     8     7
     4     8     8     3     4
     3     8     2     1    10
     5     2     6     8     3
     5     7     4     7     7
     4     5     6     8     7
     6     3     4     7     4
     8     1     5     5     2
     5     9     2     4     1
     5     2     3     9     5
     2     2     1     4     2
     1     7    10     9     8
     3     9     7     8     4
     4     6    10     9     9
     7     8     2     6     8
    10     2    10     7     6
    10    10     8    10     2
     5     6     6     5    10
     3     7     5     1     3
     8     1     3     9    10
grps =
     3     2     2     4     5     4
new_pattern =
     1     4     2     5     3     6
输出:

newx =
     1     2     3     8     9    10    11     4     5    12 ...    
    13    14    15    16     6     7    17    18    19    20
newA =
     3     3     2     5     8
     4     3     3     7     7
     1     5     2     8     1
     4     6     4     1     4
     7     1     5     8     8
     4     9    10    10     8
     7    10    10     4     3
     7     3     1     6     9
     2     9     2     6    10
     1     1     7    10     3
    10    10    10     4     7
     9     1     8     9     5
     8     7     4     5     7
     9     8     7     5     3
     1    10     7     6     8
     8     1    10     6     1
     4     6     3     3     2
     7     9     3     2     9
     6     9     7     4     8
     6     7     6     8    10
带和的一种方法-

样本运行-

输入:

A =
     6     8     9     8     7
     4     8     8     3     4
     3     8     2     1    10
     5     2     6     8     3
     5     7     4     7     7
     4     5     6     8     7
     6     3     4     7     4
     8     1     5     5     2
     5     9     2     4     1
     5     2     3     9     5
     2     2     1     4     2
     1     7    10     9     8
     3     9     7     8     4
     4     6    10     9     9
     7     8     2     6     8
    10     2    10     7     6
    10    10     8    10     2
     5     6     6     5    10
     3     7     5     1     3
     8     1     3     9    10
grps =
     3     2     2     4     5     4
new_pattern =
     1     4     2     5     3     6
输出:

newx =
     1     2     3     8     9    10    11     4     5    12 ...    
    13    14    15    16     6     7    17    18    19    20
newA =
     3     3     2     5     8
     4     3     3     7     7
     1     5     2     8     1
     4     6     4     1     4
     7     1     5     8     8
     4     9    10    10     8
     7    10    10     4     3
     7     3     1     6     9
     2     9     2     6    10
     1     1     7    10     3
    10    10    10     4     7
     9     1     8     9     5
     8     7     4     5     7
     9     8     7     5     3
     1    10     7     6     8
     8     1    10     6     1
     4     6     3     3     2
     7     9     3     2     9
     6     9     7     4     8
     6     7     6     8    10

它应该值得一试。
A=A([3:4,1:2,5:end],:)
同样,它应该可以工作。你能用符号S0,H0来表示你的代码吗?向量x也需要计算,它应该值得一试。
A=A([3:4,1:2,5:end],:)
同样,它应该可以工作。你能用符号S0,H0来表示你的代码吗?向量x也需要计算,自从我上次访问以来已经有一段时间了。我从你那里看到的第一句话是:“一种置换和重塑的方法”。变化不大…:P@Divakar. 我用给定的条件交换行。你能用符号S0吗。H0…为您的代码。向量x也需要exchange@StewieGriffin是啊,什么都没变!我被诅咒坚持使用
bsxfun
permute
重塑
;)这三者。)@user8430请检查编辑内容。我想我第一次误解了这个问题。现在应该修好了。是的,这正是我需要的。变化向量x对应于矩阵AIt的顺序变化,自从我上次访问以来,已经有一段时间了。我从你那里看到的第一句话是:“一种置换和重塑的方法”。变化不大…:P@Divakar. 我用给定的条件交换行。你能用符号S0吗。H0…为您的代码。向量x也需要exchange@StewieGriffin是啊,什么都没变!我被诅咒坚持使用
bsxfun
permute
重塑
;)这三者。)@user8430请检查编辑内容。我想我第一次误解了这个问题。现在应该修好了。是的,这正是我需要的。那么变化向量x对应于矩阵A的阶数变化呢