Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 寻找给定矩阵的特定子矩阵_C#_Arrays_Matrix_2d - Fatal编程技术网

C# 寻找给定矩阵的特定子矩阵

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已被删除 我自己能想出的

假设我有一个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已被删除

我自己能想出的解决方案是这个函数,它工作得很好,做它应该做的事情,但是我想要一个更小、更紧凑、更有意义的解决方案

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