Я могу только найти результаты, которые используют кортежи координат для присвоения определенных значений, как этот.
Я хочу присвоить значения двумерному массиву в зависимости от их координат. Простейшим случаем было бы установить значение каждого элемента на свой второй индекс (например, x-координата). Таким образом,
x[0][0] = 0
x[1][0] = 0
...
x[2][0] = 0
x[0][1] = 1
x[0][2] = 2
...
Более сложным было бы установить эти значения на евклидово расстояние до некоторой точки (x, y)
.
Мое настоящее решение - использовать for-loop, который определенно неэффективен. Было бы хорошо провести векторизованную реализацию.
Моя текущая реализация:
x_mask = np.zeros((256, 256))
for i in range(256):
for j in range(256):
x_mask[i][j] = j
Вы можете назначить диапазон и воспользоваться вещанием NumPy:
A = np.zeros((256, 256))
A[:] = range(A.shape[1])
# or A[:] = np.arange(A.shape[1])
Выбранный вами метод будет зависеть от функции, которую вы хотите применить.
Кажется, что numpy.mgrid
является правильным инструментом для этого (особенно если вы хотите как x, так и y).
Пример, скопированный из документации:
>>> np.mgrid[0:5,0:5]
array([[[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3],
[4, 4, 4, 4, 4]],
[[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]]])
Попробуй это:
a=[]
for i in range(4):
b=[]
for j in range(4):
b.append(j)
a.append(b)