Как создать границу / Манипулировать / Изменять значения массива Numpy

#python #numpy

Вопрос:

Представьте, что изображение ниже представляет собой (64,64) 2D массив Numpy. Как мне сделать этот массив Numpy, который имеет нули (0) в качестве границы, чтобы выделить меньшую область (выделенную зеленым цветом). Не имеет значения, какую область он выбирает (если она находится в верхней средней правой области массива). Конечный результат должен выглядеть как изображение справа, где все остальные значения равны 0, кроме тех, которые выделены зеленым цветом? введите описание изображения здесь

Комментарии:

1. что ты пробовал? Где ваш код? вы пробовали использовать обычный arr[y1:y2, x1:x2] = 0 с разными значениями, чтобы запустить его 4 раза — один раз для верхней строки, один раз для нижней строки, один раз для левого столбца и один раз для правого столбца?

2. или, может быть, сначала создайте array64x64 только с нулями и скопируйте ожидаемую область a[3:5,4:6] = b[3:5,4:6] .

3. Я действительно пытался разделить его, как метод, но он удаляет те нули, которые мне нужны. Я попробую ваше решение ниже.

Ответ №1:

Я не знаю, понимаю ли я проблему, но вы можете создать массив 64,64 с нулями и скопировать зеленую область из предыдущего массива.

Чтобы сделать его более заметным, я использую массив (10,10)

 import numpy as np

#SIZE = 64
SIZE = 10

old_arr = np.random.randint(10, size=(SIZE, SIZE))

new_arr = np.zeros((SIZE, SIZE))

new_arr[3:5,4:6] = old_arr[3:5,4:6]

print(old_arr)
print(new_arr)
 

Комментарии:

1. Должно ли разделение быть 30:50,40:60 в моем случае? так как это массив (64,64) , но визуально я нарисовал только 8 ящиков

2. если у вас 8 коробок, то каждая коробка имеет размер 8x8 , и вам нужно 3*8 : 5*8, 4*8 : 6*8 вместо 3*10 : 5*10, 4*10 : 6*10