Это моя попытка ответить на ваш вопрос
пожалуйста, найдите объяснение в комментарии
Примечание: предполагается, что сетка заканчивается в 9 в направлении y
import numpy as np
xd = np.arange(0, 20, 1)
yd = np.arange(0, 10, 1)
grid = np.random.choice([True, False], (len(xd), len(yd)))
x_start = 2.7
x_end = 4.9
y_start = 1.5
y_end = 5.7
## find line equation
m = (y_end - y_start)/(x_end-x_start)
c = y_start - m*x_start
## find y value of line at all starting x of grid
y_line = m*xd + c
## find y index of cell at which line cross at each start of grid
insert_ind = yd.searchsorted(y_line)
## find x and y index of grid where line intersect
x_index, y_index = zip(*[(i,ind) for i, ind in enumerate(insert_ind) if (ind>0 and ind<len(yd)-1)])
## create grid with all False for intersecting and set intersecting cells to True
intersecting_grid = np.full((len(xd), len(yd)), False)
intersecting_grid[x_index, y_index] = True
result = intersecting_grid & grid
print(result)