Мне нужно заполнить N прямоугольными областями заполненного 0 двумерного массива единицами.Области для заполнения хранятся в массиве Nx4, где каждая строка содержит границы прямоугольника (x_low, x_high, y_low, y_high).Эта часть в настоящее время является самой медленной частью того, что я сейчас работаю, и мне интересно, можно ли это сделать быстрее.
В настоящее время это делается путем простой итерации по массиву региона, и целевой массив заполняетсяс теми, которые используют ломтики:
import numpy as np
def fill_array_with_ones(coordinates_array, target_array):
for row in coordinates_array:
target_array[row[0]:row[1], row[2]:row[3]] = 1
coords = np.array([[1,3,1,3], [3,5,3,5]])
target = np.zeros((5,5))
fill_array_with_ones(coords, target)
print(target)
Вывод:
array([[0., 0., 0., 0., 0.],
[0., 1., 1., 0., 0.],
[0., 1., 1., 0., 0.],
[0., 0., 0., 1., 1.],
[0., 0., 0., 1., 1.]])
Я ожидал, что есть какая-то непонятная магия, которая позволила бы мне сделать это векторизованным способом, который бы избавилсяитерации по строкам и, мы надеемся, приведут к более быстрому выполнению:
target[bounds_to_slices(coords)] = 1