我有两个数组 mat1 和 Mat2。
我想要 new_mat=[ma1,mat2];
我写了一个可以运行的函数。我想知道是否有一个适用于非常大的矩阵的有效函数或者如何使用 Array.CopyTo 方法来做到这一点。
public static double[,] Concatenate_matrix_byCol(double[,] Mat1, double[,] Mat2)
{
int col1=Mat1.GetLength(1);
int col2 = Mat2.GetLength(1);
int row1=Mat1.GetLength(0);
int row2 = Mat2.GetLength(0);
int i, j, y;
double[,] newMat = new double[row1, col1 + col2];
for (i = 0; i < row1; i++)
{
for (j = 0; j < col1; j++)
{
newMat[i, j] = Mat1[i, j];
}
}
for (i = 0; i < row1; i++)
{
for (y = 0; y < col2; y++)
{
newMat[i, y+col1] = Mat2[i, y];
}
}
return newMat;
}
您可以将循环合并为:
for (i = 0; i < row1; i++)
{
for (j = 0; j < col1; j++)
newMat[i, j] = Mat1[i, j];
for (y = 0; y < col2; y++)
newMat[i, y+col1] = Mat2[i, y];
}
也许可以使用指针(首先测试性能!),但库无疑是最好的解决方案。这样您就不必自己进行微观优化。
此线程中提到了很多 .Net 库:.NET 矩阵库 https://stackoverflow.com/questions/840360/matrix-library-for-net
根据您的性能要求,您还可以研究并行算法,您可能会受到以下启发http://innovatian.com/2010/03/parallel-matrix-multiplication-with-the-task-parallel-library-tpl/ http://innovatian.com/2010/03/parallel-matrix-multiplication-with-the-task-parallel-library-tpl/。同样,一个构建良好的库可能已经拥有并行算法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)