Как создать массив numpy с координатами (y, x) в качестве значений?

avatar
Julian56520
8 августа 2021 в 21:06
156
3
1

Массив должен быть таким:

[[[0,0], [0,1], [0,2], [0,3]],
 [[1,0], [1,1], [1,2], [1,2]],
 [[2,0], [2,1], [2,2], [2,2]]]

Моя попытка (очень неэффективная):

coord = np.empty((height, width, 2))
for h in range(height):
    for w in range(width):
        for z in range(2):
            coord[h][w][z] = h if z == 0 else w
Источник

Ответы (3)

avatar
Alex Alex
9 августа 2021 в 03:40
0

Вы можете попробовать этот код:

import numpy as np
height=3
width=4
x=np.arange(height)
y=np.arange(width)
coord=np.stack(np.meshgrid(y,x)[::-1], axis=2)
avatar
Mohammad
8 августа 2021 в 21:30
0

Вы можете использовать np.indices для создания массива, затем вам нужно будет правильно транспонировать его, чтобы получить требуемое поведение:

x = np.indices((3,4)).T
x =list(map(list, zip(*x)))

Лучший подход:

x = np.indices((4,3))
x = np.array((x[1],x[0])).T
avatar
WArnold
8 августа 2021 в 21:15
0

что вы называете неэффективным?

Вы пробовали понимать список?

height = 3
width = 4
[[[i,j] for j in range(width)] for i in range(height)]