При длине начального и конечного индексных массивов - starts
и ends
длин большей длины, мы могли бы создать маску этих мест -
r = np.arange(A.shape[1])
mask = (r >= np.asarray(starts)[:,None]) & (r < np.asarray(ends)[:,None])
A[mask] = 0
Образец цикла -
In [47]: np.random.seed(0)
In [48]: A = np.random.randint(10,100,(4,10))
In [49]: A
Out[49]:
array([[54, 57, 74, 77, 77, 19, 93, 31, 46, 97],
[80, 98, 98, 22, 68, 75, 49, 97, 56, 98],
[91, 47, 35, 87, 82, 19, 30, 90, 79, 89],
[57, 74, 92, 98, 59, 39, 29, 29, 24, 49]])
In [50]: starts = np.array([2,4,1,0,])
In [51]: ends = np.array([4,7,5,2])
In [52]: r = np.arange(A.shape[1])
...: mask = (r >= np.asarray(starts)[:,None]) & (r < np.asarray(ends)[:,None])
...: A[mask] = 0
In [53]: A
Out[53]:
array([[54, 57, 0, 0, 77, 19, 93, 31, 46, 97],
[80, 98, 98, 22, 0, 0, 0, 97, 56, 98],
[91, 0, 0, 0, 0, 19, 30, 90, 79, 89],
[ 0, 0, 92, 98, 59, 39, 29, 29, 24, 49]])
Если начальные, конечные массивы начинаются с малого числа, или если массив A
очень большой, то может быть лучше просто зацикливание.