如何在MATLAB中交换矩阵的行组?
我有一个矩阵a和向量x,如下所示(左侧) 其中S0,H0,…是每个块的行号。我想交换这些块,使S0和S1;H0和H1靠近右侧。这是我的密码如何在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+
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的阶数变化呢