Я думаю, что вы имеете в виду с помощью LINQ
public double[][] GetSubMatrix(int row, int col, int row_count, int col_count)
{
return elements.Skip(row).Take(row_count).Select(
(each_row) => each_row.Skip(col).Take(col_count).ToArray()).ToArray();
}
Мои предпочтения для матричных структур использовать неровные массивы без LINQ. Вы не можете легко устанавливать значения в массиве с помощью LINQ, и команды становятся довольно длинными и глупыми через некоторое время.
Я использую Array.Copy
как можно больше вместо внутренних петель.
Попробуйте Matrix
общий образец класса:
public class Matrix<T>
{
readonly int rows, cols;
readonly T[][] elements;
public Matrix(int rows, int cols)
{
this.rows=rows;
this.cols=cols;
this.elements=new T[rows][];
for(int i = 0; i<rows; i++)
{
elements[i]=new T[cols];
}
}
public int Rows { get { return rows; } }
public int Columns { get { return cols; } }
public T this[int row, int col]
{
get { return elements[row][col]; }
set { elements[row][col]=value; }
}
public T[] GetRow(int row) { return elements[row]; } // This is fast
public T[] GetColumn(int col) // This is slow
{
T[] column = new T[rows];
for(int i = 0; i<rows; i++)
{
column[i]=elements[i][col];
}
return column;
}
public T[][] GetSubMatrix(int row, int col, int row_count, int col_count)
{
T[][] result = new T[row_count][];
for(int i = 0; i<row_count; i++)
{
// This is fast
Array.Copy(elements[row+i], col, result[i], 0, col_count);
}
return result;
}
public void SetSubMatrix(int row, int col, T[][] matrix)
{
int row_count = matrix.Length;
int col_count = row_count>0 ? matrix[0].Length : 0;
for(int i = 0; i<row_count; i++)
{
// This is fast
Array.Copy(matrix[i], 0, elements[row+i], col, col_count);
}
}
}
Post ваш текущий код. – Rahul
@Rahul: не могу придумать, почему это было бы полезно для ответа на мой вопрос, есть ли «хороший» способ сделать это. Я уже описал свое текущее решение таким образом, чтобы все могли представить, как выглядит текущее решение. –
Вы не должны запрашивать «хороший» ответ. «Хороший» в основном основан на мнениях –