如何从EJML的DMatrixRMaj中获取double[][]格式的矩阵数据?
解决EJML中DMatrixRMaj转double[][]的问题
嘿,刚好我对EJML的矩阵操作比较熟,给你几个不用写自定义转换函数的现成方案:
方案1:使用ConvertMatrixData工具类(推荐)
EJML专门提供了org.ejml.data.ConvertMatrixData这个工具类,里面的静态方法convert()可以直接帮你完成转换,甚至不用提前创建目标数组:
import org.ejml.data.ConvertMatrixData; import org.ejml.data.DMatrixRMaj; // 假设d是已经完成运算的DMatrixRMaj对象 double[][] resultMatrix = ConvertMatrixData.convert(d, null);
当第二个参数传null时,方法会自动创建一个和原矩阵尺寸完全匹配的double[][]数组,然后把数据复制进去,非常省心。
方案2:使用DMatrixRMaj的copyInto()方法
如果你想自己控制目标数组的创建,也可以用DMatrixRMaj自带的copyInto()方法,前提是你要先创建好尺寸正确的二维数组:
// 先创建和d尺寸一致的二维数组 double[][] resultMatrix = new double[d.numRows][d.numCols]; // 把d的数据复制到数组里 d.copyInto(resultMatrix);
这个方法会直接将矩阵的数据按行优先的顺序填充到你传入的数组中,如果数组尺寸不匹配,会抛出IllegalArgumentException。
方案3:用SimpleMatrix的getArray()方法
你提到试过SimpleMatrix,其实它的getArray()方法就是专门用来获取double[][]格式的矩阵数据的,只要用SimpleMatrix包装你的DMatrixRMaj即可:
import org.ejml.simple.SimpleMatrix; SimpleMatrix simpleMatrix = new SimpleMatrix(d); double[][] resultMatrix = simpleMatrix.getArray();
需要注意的是,getArray()返回的是原矩阵数据的副本,修改它不会影响原DMatrixRMaj的数据,所以可以放心使用。
内容的提问来源于stack exchange,提问作者Lore
相关产品推荐
相关产品推荐

