如何从 MATLAB 中的矩阵创建子矩阵(全部 5*5)?
How to create Sub matrix(all 5*5) from a Matrix in MATLAB?
如何在 MATLAB 中从矩阵创建子矩阵(均为 5*5)?这可以通过恰好移动一行和一个 column.I 尝试使用以下代码来完成,但我没有得到实际的 output.Here A 是输入矩阵。
A=[40 45 50 60 70 80;
10 12 15 17 18 20;
35 41 57 44 98 78;
45 74 11 2 36 78;
12 45 79 85 36 45;
1 5 8 78 47 3]
for i=1:size(A,1)-4
for j=1:size(A,2)-4
B{i,j}=A(i:i+4,j:j+4)
end
end
现在我得到这个输出:
A =
40 45 50 60 70 80
10 12 15 17 18 20
35 41 57 44 98 78
45 74 11 2 36 78
12 45 79 85 36 45
1 5 8 78 47 3
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
}
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
[1,2] =
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
}
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
[2,1] =
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
1 5 8 78 47
[1,2] =
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
[2,2] = [](0x0)
}
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
[2,1] =
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
1 5 8 78 47
[1,2] =
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
[2,2] =
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
5 8 78 47 3
}
但我需要这样的输出:
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
1 5 8 78 47
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
5 8 78 47 3
我的代码需要更改什么?
您已经创建了一个矩阵元胞数组,因此 B
会按原样显示。
尝试这样做:
A=[40 45 50 60 70 80;
10 12 15 17 18 20;
35 41 57 44 98 78;
45 74 11 2 36 78;
12 45 79 85 36 45;
1 5 8 78 47 3];
for i=1:size(A,1)-4
for j=1:size(A,2)-4
B = A(i:i+4,j:j+4);
disp(B)
end
end
根据您想对每个子矩阵执行的操作,下一步的操作会有所不同。您可以采用的一种方法是将子矩阵保存在具有相关名称的 .mat 文件中,例如:
save(['B_',num2str(i),'_',num2str(j),'.mat'],'B')
(将此行放在我的示例中调用 disp
的位置。)
重复显示是因为您在 B
中保存子矩阵的行中缺少分号。
您期望的输出需要此索引:
B{j,i} = A(i:i+4, j:j+4);
然后您可以使用celldisp(B)
来显示单元格。
还请在使用 B=cell(2, 2);
循环之前预先分配元胞数组
如何在 MATLAB 中从矩阵创建子矩阵(均为 5*5)?这可以通过恰好移动一行和一个 column.I 尝试使用以下代码来完成,但我没有得到实际的 output.Here A 是输入矩阵。
A=[40 45 50 60 70 80;
10 12 15 17 18 20;
35 41 57 44 98 78;
45 74 11 2 36 78;
12 45 79 85 36 45;
1 5 8 78 47 3]
for i=1:size(A,1)-4
for j=1:size(A,2)-4
B{i,j}=A(i:i+4,j:j+4)
end
end
现在我得到这个输出:
A =
40 45 50 60 70 80
10 12 15 17 18 20
35 41 57 44 98 78
45 74 11 2 36 78
12 45 79 85 36 45
1 5 8 78 47 3
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
}
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
[1,2] =
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
}
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
[2,1] =
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
1 5 8 78 47
[1,2] =
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
[2,2] = [](0x0)
}
B =
{
[1,1] =
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
[2,1] =
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
1 5 8 78 47
[1,2] =
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
[2,2] =
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
5 8 78 47 3
}
但我需要这样的输出:
40 45 50 60 70
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
45 50 60 70 80
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
10 12 15 17 18
35 41 57 44 98
45 74 11 2 36
12 45 79 85 36
1 5 8 78 47
12 15 17 18 20
41 57 44 98 78
74 11 2 36 78
45 79 85 36 45
5 8 78 47 3
我的代码需要更改什么?
您已经创建了一个矩阵元胞数组,因此 B
会按原样显示。
尝试这样做:
A=[40 45 50 60 70 80;
10 12 15 17 18 20;
35 41 57 44 98 78;
45 74 11 2 36 78;
12 45 79 85 36 45;
1 5 8 78 47 3];
for i=1:size(A,1)-4
for j=1:size(A,2)-4
B = A(i:i+4,j:j+4);
disp(B)
end
end
根据您想对每个子矩阵执行的操作,下一步的操作会有所不同。您可以采用的一种方法是将子矩阵保存在具有相关名称的 .mat 文件中,例如:
save(['B_',num2str(i),'_',num2str(j),'.mat'],'B')
(将此行放在我的示例中调用 disp
的位置。)
重复显示是因为您在 B
中保存子矩阵的行中缺少分号。
您期望的输出需要此索引:
B{j,i} = A(i:i+4, j:j+4);
然后您可以使用celldisp(B)
来显示单元格。
还请在使用 B=cell(2, 2);