You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Math.Net中提取多维数组的子矩阵并转置?

Math.NET 提取三维数组子矩阵并转置的实现方法

方法一:直接从三维数组提取子矩阵(推荐)

不需要先将整个三维数组转换为大矩阵,直接针对每个k值提取对应的3x3子矩阵,再调用转置方法即可:

// 提取k=0对应的3x3子矩阵并转置
var mat0 = DenseMatrix.Create(3, 3, (i, j) => matA[0, i, j]);
Matrix<double> mat0Transposed = mat0.Transpose();

// 提取k=1对应的3x3子矩阵并转置
var mat1 = DenseMatrix.Create(3, 3, (i, j) => matA[1, i, j]);
Matrix<double> mat1Transposed = mat1.Transpose();

方法二:从已转换的大矩阵中提取子矩阵

如果你已经通过DenseMatrix.OfArray(matA)得到了大矩阵matAnew,需要明确这个大矩阵的结构:三维数组[2,3,3]会被转换为6行3列的二维矩阵(2个3行的子矩阵按行拼接)。此时SubMatrix方法的参数定义为:
SubMatrix(起始行索引, 提取行数, 起始列索引, 提取列数)

具体代码如下:

// 提取k=0对应的前3行子矩阵并转置
var subMat0 = matAnew.SubMatrix(0, 3, 0, 3);
var subMat0Transposed = subMat0.Transpose();

// 提取k=1对应的后3行子矩阵并转置
var subMat1 = matAnew.SubMatrix(3, 3, 0, 3);
var subMat1Transposed = subMat1.Transpose();

补充说明

  • 若想节省内存、直接在原矩阵上修改转置结果,可使用TransposeInPlace()方法替代Transpose()。
  • 方法一更直观,能避免因大矩阵结构混淆导致的索引错误,推荐优先使用。

内容的提问来源于stack exchange,提问作者hasahmet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:28:24