Java 将行附加到矩阵的最佳方式是什么?
我试图将一行附加到预先存在的矩阵中。我写了一些代码(如下所示)来实现这一点,但我忍不住觉得有更好的方法来实现这一点(或者可能已经有一个apachecommons函数来实现这一点??) 代码Java 将行附加到矩阵的最佳方式是什么?,java,matrix,linear-algebra,apache-commons,Java,Matrix,Linear Algebra,Apache Commons,我试图将一行附加到预先存在的矩阵中。我写了一些代码(如下所示)来实现这一点,但我忍不住觉得有更好的方法来实现这一点(或者可能已经有一个apachecommons函数来实现这一点??) 代码 private RealMatrix appendRow(RealMatrix m) { double[][] mData = m.getData(); double[][] newData = new double[m.getRowDimension()+1][m.getColumnDim
private RealMatrix appendRow(RealMatrix m) {
double[][] mData = m.getData();
double[][] newData = new double[m.getRowDimension()+1][m.getColumnDimension()];
for (int i = 0; i < m.getRowDimension(); i++) {
newData[i] = mData[i];
}
newData[m.getRowDimension()] = new double[m.getColumnDimension()];
return MatrixUtils.createRealMatrix(newData);
}
任何提示都将不胜感激 你走对了路。我唯一可以添加的想法是替换此循环:
for (int i = 0; i < m.getRowDimension(); i++) {
newData[i] = mData[i];
}
for(int i=0;i
与:
for(int i=0;i
你走对了路。我唯一可以添加的想法是替换此循环:
for (int i = 0; i < m.getRowDimension(); i++) {
newData[i] = mData[i];
}
for(int i=0;i
与:
for(int i=0;i
假设RealMatrix
是您的自定义类,您需要编写一些代码。有像ApacheCommonsLang这样的库,它有一个方法ArrayUtils.add(数组,新元素)
(实际上是一堆重载),但您的代码并没有那么复杂,无法证明仅为此添加一个额外的依赖项是合理的
但有几点需要注意:
double[]newData=newdouble[m.getRowDimension()+1][m.getColumnDimension()]
已经创建了“内部”数组,即行,因此newData[m.getRowDimension()]=new double[m.getColumnDimension()]代码>是不必要的
还要注意,newData[i]=mData[i]代码>风险多个矩阵使用相同的行,因此更改一个矩阵也会更改其他矩阵。因此,我建议您使用System.arrayCopy(mData[I],0,newData[I],0,mData[I].length)
而不是newData[I]=mData[I]
进行复制
要说明最后一点,请尝试RealMatrix m2=appendRow(m)
,然后更改其中一个复制的元素(例如,将[0][0]更改为7),并同时打印m
和m2
,假设RealMatrix
是您的自定义类,您无论如何都需要编写一些代码。有像ApacheCommonsLang这样的库,它有一个方法ArrayUtils.add(数组,新元素)
(实际上是一堆重载),但您的代码并没有那么复杂,无法证明仅为此添加一个额外的依赖项是合理的
但有几点需要注意:
double[]newData=newdouble[m.getRowDimension()+1][m.getColumnDimension()]
已经创建了“内部”数组,即行,因此newData[m.getRowDimension()]=new double[m.getColumnDimension()]代码>是不必要的
还要注意,newData[i]=mData[i]代码>风险多个矩阵使用相同的行,因此更改一个矩阵也会更改其他矩阵。因此,我建议您使用System.arrayCopy(mData[I],0,newData[I],0,mData[I].length)
而不是newData[I]=mData[I]
进行复制
要说明最后一点,请尝试RealMatrix m2=appendRow(m)
,然后更改其中一个复制的元素(例如,将[0][0]更改为7),并同时打印m
和m2
,假设重用行数组(您在当前代码中执行的操作)不成问题,则将for循环替换为:
double[][] newData = Arrays.copyOf(data, 0, data.length + 1);
假设重用行数组(您在当前代码中正在这样做)没有问题,那么将for循环替换为:
double[][] newData = Arrays.copyOf(data, 0, data.length + 1);