Думаю, это то, что вы ищете. Я не думаю, что для этого есть векторизованное решение, которое позволяет избежать явного цикла по строкам.
np.random.seed(2)
a = np.random.randint(10, size=(5, 10))
print(f'Original a:\n{a}')
for row in a:
row[np.argwhere(row <= 2)[0, 0]:] = 0
print(f'Modified a:\n{a}')
Вывод:
Original a:
[[8 8 6 2 8 7 2 1 5 4]
[4 5 7 3 6 4 3 7 6 1]
[3 5 8 4 6 3 9 2 0 4]
[2 4 1 7 8 2 9 8 7 1]
[6 8 5 9 9 9 3 0 0 2]]
Modified a:
[[8 8 6 0 0 0 0 0 0 0]
[4 5 7 3 6 4 3 7 6 0]
[3 5 8 4 6 3 9 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[6 8 5 9 9 9 3 0 0 0]]