我正在尝试用Java创建一个网格点列表。
例如,对于10x10
网格,这可以在Python中很好地完成:
xv, yv = np.meshgrid(np.linspace(1, 10, 10), np.linspace(1, 10, 10))
grid = np.dstack((xv, yv)).reshape(-1, 2)
结果:
array([[ 1., 1.],
[ 2., 1.],
[ 3., 1.],
...,
[ 8., 10.],
[ 9., 10.],
[ 10., 10.]])
如何在“纯粹的”Java中有效地完成这项工作?
答案 0 :(得分:2)
一种方法是使用普通数组:
int[][] array = new int[100][];
for(int i = 0; i < array.length; i++) {
array[i] = new int[] {i % 10 + 1, i / 10 + 1};
}
您可能希望将int[][] array = new int[100][];
更改为double[][] array = new double[100][];
。
测试了你的python代码,这段代码给出了完全相同的输出。
答案 1 :(得分:1)
如果您不需要在生成后修改列表,则可以使用对象更有效地执行此操作。
class GridPoints {
private final int size;
public GridPoints(int size) {
this.size = size;
}
public int[] get(int i) {
return new int[] {
(i % size) + 1,
(i / size) + 1
};
}
}
public void test() {
GridPoints g = new GridPoints(10);
for ( int i = 0; i < 100; i++) {
System.out.println(Arrays.toString(g.get(i)));
}
}
答案 2 :(得分:-1)
int x = 1;
for(in i = 0; i < numbers.length; i++){
for(int j = 0; j < numbers[0].length; j++){
numbers[i][j] = x;
x++;
}
}