用Java创建网格点列表

时间:2017-05-10 07:22:33

标签: java

我正在尝试用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中有效地完成这项工作?

3 个答案:

答案 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代码,这段代码给出了完全相同的输出。

DEMO

答案 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++;
    }
}