#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