[英]JAVA pass column of 2d array as 1d array
我需要将2d数组的列作为1d数组传递。
我已经做了这个例子来解释,我不知道如何调用打印功能。
public static void main(String[] args) {
double[][] matrix = {{ 0,1,2},
{3,4,5},
};
}
public void print(double[] vector){
for(int i = 0; i< vector.length ; i++){
System.out.print(vector[i]);
}
}
我能怎么做?
这是您要找的解决方案吗?
public static void main(String[] args) {
double[][] matrix = { { 0, 1, 2 }, { 3, 4, 5 }, };
for (int i = 0; i < matrix.length; i++) {
print(matrix[i]);
System.out.println();//Prints a new line
}
}
public static void print(double[] vector) {
for (int i = 0; i < vector.length; i++) {
System.out.print(vector[i] + " ");
}
}
遍历数组并获取1D数组子元素,然后将它们分别传递给打印功能。
编辑:
没有任何简单的方法可以做到这一点。 您必须相应地更改数据结构。 因此,这是一种原始的实现方式:
再次遍历数组并按列提取元素。 然后将它们存储在另一个数组( cols
)中并进行打印。
double[][] matrix = { { 0, 1, 2 }, { 3, 4, 5 }, };
for (int j = 0; j < matrix[0].length; j++) {
double[] cols = new double[matrix.length];
for (int i = 0; i < matrix.length; i++) {
cols[i] = matrix[i][j];// Iterate column-wise
}
print(cols);// Call the 1D array print method
System.out.println();// Prints new line
}
我需要将2d数组的列作为1d数组传递。
不,您不能直接使用2D数组调用方法,因为您的方法使用参数double[]
而不是double[][]
。 2D数组中可以包含1D数组作为元素。 因此, matrix[int index]
将为您提供一维数组以将其传递给方法。
因此,要么将方法声明更改为print(double[][] vectors)
要么将matrix[index]
作为方法参数传递。
您可以通过类的实例来调用该方法。
YourClass obj = YourClass();
obj.print(matrix[i]);
由于您的方法需要向量,因此应使用matrix[index]
。
您可以通过在矩阵上迭代来构建列向量,然后将向量传递给该方法。
编辑:
您需要遍历矩阵并将所有1D数组的第一个元素收集到另一个1D数组,并将其作为方法的参数传递。
double[] vector = new double[matrix.length];
for(int i=0;i<matrix.length;i++) {
double oneDArray[] = matrix[i];//Only for example
if(oneDArray != null && oneDArray.length >0 ) {
vector[i] = oneDArray[0];
}
}
您忘记了方法标题中的双方括号,并且没有将方法声明为静态。因此: public void print(double[] vector)
应该是: public static void print(double[][]vector)
。 调用print方法: print(matrix);
。 另外,您的for循环是错误的。 您必须有两个方括号。 现在,它将打印类似于以下内容的内容: [D@48e61e
。 那是因为您需要使用双括号,因此如果要打印一行,它将是:
for(int i = 0; i< vector[1].length ; i++){
System.out.print(vector[0][i]);
}
要打印列,请执行以下操作:
int j = 1;//or whatever column you want to print
for(int i=0; i<vector.length; i++){
System.out.println(vector[i][j]);
}
如果您可以使用第三方库,那么可以看看Common Maths Library
您只需三行代码即可获得该列:
double[][] twoDimData = new double[10][10];
BigMatrix matrix = MatrixUtils.createBigMatrix(twoDimData);
matrix.getColumnAsDoubleArray(0);
如果您想使用低级解决方案,则可以尝试:
double[][] matrix = {{ 0,1,2},{3,4,5}};
int columnToTake = 2;
double[] colArray;
for(int row = 0; row < numRows; row++)
{
colArray[row] = matrix[row][columnToTake];
}
print(colArray)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.