您如何找到';M';由';M';输入中心的子矩阵';N';由';N';矩阵?(在Matlab中)
如何在Matlab中编写一个函数,以在nxn输入矩阵的中心输出mxm子矩阵?函数应该有两个输入参数:nxn输入矩阵(2D数组)和要从输入矩阵中提取的方子矩阵M的大小。唯一的输出应该是位于输入矩阵中心的M x M子矩阵。该函数应该用于循环以提取子矩阵,而不是使用冒号符号或任何内置函数来提取这部分代码。该函数应适用于任意平方输入矩阵,其中N≥ 3.如果N是偶数,那么M应该是偶数。如果N是奇数,那么M应该是奇数 用于循环和偏移索引 前言: 在这里,我想把这个问题想象成修剪矩阵。本例中我表示的修剪量为您如何找到';M';由';M';输入中心的子矩阵';N';由';N';矩阵?(在Matlab中),matlab,Matlab,如何在Matlab中编写一个函数,以在nxn输入矩阵的中心输出mxm子矩阵?函数应该有两个输入参数:nxn输入矩阵(2D数组)和要从输入矩阵中提取的方子矩阵M的大小。唯一的输出应该是位于输入矩阵中心的M x M子矩阵。该函数应该用于循环以提取子矩阵,而不是使用冒号符号或任何内置函数来提取这部分代码。该函数应适用于任意平方输入矩阵,其中N≥ 3.如果N是偶数,那么M应该是偶数。如果N是奇数,那么M应该是奇数 用于循环和偏移索引 前言: 在这里,我想把这个问题想象成修剪矩阵。本例中我表示的修剪量为t
trim\u amount
。Trim_Amount
指示子矩阵的大小以及开始读取/保存子矩阵的起点
由于修剪量始终取自每一侧,因此可以预期子矩阵的尺寸如下所示:
子矩阵宽度=M-(2×修剪量)2×微调量将始终导致偶数,因此可以这样说:
如果M是偶数→ M-(偶数)→ 偶数
如果M是奇数→ M-(偶数)→ 奇数
测试输出结果: 我建议仔细阅读代码,以过滤任何意外问题 完整脚本: 使用MATLAB R2019b运行使用For循环和偏移索引 前言: 在这里,我想把这个问题想象成修剪矩阵。本例中我表示的修剪量为
trim\u amount
。Trim_Amount
指示子矩阵的大小以及开始读取/保存子矩阵的起点
由于修剪量始终取自每一侧,因此可以预期子矩阵的尺寸如下所示:
子矩阵宽度=M-(2×修剪量)2×微调量将始终导致偶数,因此可以这样说:
如果M是偶数→ M-(偶数)→ 偶数
如果M是奇数→ M-(偶数)→ 奇数
测试输出结果: 我建议仔细阅读代码,以过滤任何意外问题 完整脚本:
使用MATLAB R2019b运行如果需要,请展示您的尝试并询问有关代码的特定信息。另外,您真的需要使用循环吗?如果没有循环,做起来会容易得多,我的部分任务是用于循环,我真的不知道从哪里开始。我从创建流程图开始。我会在一分钟内附上它。很抱歉,你不知道如何处理它,但这里的问题应该更具体。我建议您先对行使用循环,然后对列使用循环,在内部主体循环中,您从输入中读取一个值,并将其写入输出中的一个条目Hank you@Luismendos解决此任务的一些有用函数可能包括
size()
和rand()
用于生成随机测试矩阵。如果需要,请展示您的尝试并询问有关代码的特定信息。另外,您真的需要使用循环吗?如果没有循环,做起来会容易得多,我的部分任务是用于循环,我真的不知道从哪里开始。我从创建流程图开始。我会在一分钟内附上它。很抱歉,你不知道如何处理它,但这里的问题应该更具体。我建议您对行使用循环,然后对列使用循环,在内部主体循环中,您从输入中读取一个值,并将其写入输出中的一个条目Hank you@Luismendo一些用于解决此任务的有用函数可能包括用于生成随机测试矩阵的size()
和rand()
。
Dimension = 7;
Matrix = round(100*rand(Dimension));
Trim_Amount = 1;
[Sub_Matrix] = Grab_Sub_Matrix(Matrix,Trim_Amount);
Matrix
Sub_Matrix
%Function definition%
function [Sub_Matrix] = Grab_Sub_Matrix(Matrix,Trim_Amount)
%Minimum of M must be 5 since N >= 3%
[M,~] = size(Matrix);
%Ensuring the trimming factor does not go over possible range%
Max_Trimming_Factor = M - 3;
if(Trim_Amount > Max_Trimming_Factor)
Trim_Amount = Max_Trimming_Factor;
end
%Fill in the boundaries%
Row_Start_Limit = Trim_Amount + 1;
Column_Start_Limit = Trim_Amount + 1;
%Creating sub-matrix based on amount of trimming%
Sub_Matrix = zeros(M-(2*Trim_Amount),M-(2*Trim_Amount));
for Row = 1: length(Sub_Matrix)
for Column = 1: length(Sub_Matrix)
% fprintf("(%d,%d)\n",Row,Column);
Sub_Matrix(Row,Column) = Matrix(Row + Row_Start_Limit-1,Column + Column_Start_Limit-1);
end
end
end