如何拼接两个ojAlgo库的ComplexMatrix矩阵?
ojAlgo ComplexMatrix 行拼接方案
高效批量拼接(推荐)
ojAlgo 内置了直接的行拼接工具方法,无需手动逐行填充,性能更优:
import org.ojalgo.matrix.MatrixUtils; import org.ojalgo.matrix.complex.ComplexMatrix; // 假设 matrix1 是 r1行n列,matrix2 是 r2行n列的 ComplexMatrix ComplexMatrix combined = MatrixUtils.concatRows(matrix1, matrix2);
该方法会自动创建对应尺寸的矩阵,并批量复制输入矩阵的元素,内部实现比手动逐行操作更高效。
手动子矩阵填充方案
如果需要精细控制拼接位置,可通过子矩阵视图完成填充:
int r1 = matrix1.countRows(); int r2 = matrix2.countRows(); int n = matrix1.countColumns(); // 创建目标大小的空矩阵 ComplexMatrix combined = ComplexMatrix.FACTORY.makeZero(r1 + r2, n); // 将第一个矩阵填充到上半部分 combined.subMatrix(0, r1 - 1, 0, n - 1).fillMatching(matrix1); // 将第二个矩阵填充到下半部分 combined.subMatrix(r1, r1 + r2 - 1, 0, n - 1).fillMatching(matrix2);
subMatrix 返回原矩阵的视图,fillMatching 会批量复制元素,比逐行调用 setRow 或 setElement 效率更高。
ComplexMatrix 的 DenseReceiver 等效实现
ComplexMatrix 可通过 asDenseReceiver() 获取 ComplexDenseReceiver,用于批量写入元素:
ComplexDenseReceiver receiver = combined.asDenseReceiver(); // 先写入 matrix1 的所有元素 receiver.accept(matrix1); // 接着写入 matrix2 的所有元素 receiver.accept(matrix2);
这种方式属于批量操作,效率与前两种方案相当,适合连续写入多个矩阵的场景。
注意:所有拼接操作要求输入矩阵的列数完全一致,否则会抛出维度不匹配异常。
内容的提问来源于stack exchange,提问作者user642308
相关产品推荐
相关产品推荐

