C# 寻找给定矩阵的特定子矩阵
假设我有一个2D数组,我们称之为矩阵C# 寻找给定矩阵的特定子矩阵,c#,arrays,matrix,2d,C#,Arrays,Matrix,2d,假设我有一个2D数组,我们称之为矩阵 float[,] arr = { {0, 2, 7 }, {3, 1, 0 }, {6, 2, 4 } }; 我必须创建一个函数,你给它两个整数I和j,它将返回一个没有I行和j列的矩阵。例如,如果我将(0,0)作为参数传递,我将获得 float [,] newArr = {{1, 0 }, {2, 4 } } 因为行0和列0已被删除 我自己能想出的
float[,] arr = { {0, 2, 7 },
{3, 1, 0 },
{6, 2, 4 } };
我必须创建一个函数,你给它两个整数I和j,它将返回一个没有I行和j列的矩阵。例如,如果我将(0,0)作为参数传递,我将获得
float [,] newArr = {{1, 0 },
{2, 4 } }
因为行0和列0已被删除
我自己能想出的解决方案是这个函数,它工作得很好,做它应该做的事情,但是我想要一个更小、更紧凑、更有意义的解决方案
public Matrix subMatrix(int _i, int _j)
{
Matrix result = new Matrix(_rows - 1, _cols - 1);
try
{
if (isSquare())
{
List<float> listMatrix = new List<float>();
for (int i = 0; i < _rows; i++)
for (int j = 0; j < _cols; j++)
{
if (i != _i && j != _j)
{
listMatrix.Add(matrix[i, j]);
}
}
int x = -1;
int y = 0;
int z = 0;
foreach (var item in listMatrix)
{
if (y % (result._rows) == 0)
{
x++;
y = 0;
}
result.matrix[x, y] = item;
y++;
}
}
}
catch (IndexOutOfRangeException e)
{
throw e;
}
catch (ArgumentOutOfRangeException e)
{
throw e;
}
return result;
}
公共矩阵子矩阵(int\u i,int\u j)
{
矩阵结果=新矩阵(_行-1,_列-1);
尝试
{
if(isSquare())
{
List listMatrix=新列表();
对于(int i=0;i<\u行;i++)
对于(int j=0;j<\u cols;j++)
{
如果(i!=\u i&&j!=\u j)
{
添加(矩阵[i,j]);
}
}
int x=-1;
int y=0;
int z=0;
foreach(列表矩阵中的var项)
{
如果(y%(结果_行)==0)
{
x++;
y=0;
}
结果.矩阵[x,y]=项;
y++;
}
}
}
捕获(IndexOutOfRangeException e)
{
投掷e;
}
捕获(ArgumentOutOfRange异常)
{
投掷e;
}
返回结果;
}
顺便说一句,Matrix是我制作的一个类,基本上是一个2D数组,这里有一个不同方法的简短示例
类程序
{
静态void Main(字符串[]参数)
{
float[,]arr={{0,2,7},
{3, 1, 0 },
{6, 2, 4 } };
int x=0;
int y=0;
浮动[,]arr2=子矩阵(arr,x,y);
for(int i=0;i=xi+1:i,j>=yj+1:j];
}
}
返回结果;
}
}
输出
1 0
2 4