Нулевая остальная часть строки массива, когда значение 0 или ниже истинно

У меня есть массив MxN. Я хочу обнулить все значения после того, как элемент в строке равен нулю или меньше.

Например, массив 2×12

111110011111 112321341411 

должны превратиться в

 111110000000 112321341411 

Благодаря!

Это не самый эффективный метод, но я использовал np.cumsum для этих типов вещей.

 >>> import numpy as np >>> dat = np.array([[1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], [1, 1, 2, 3, 2, 1, 3, 4, 1, 4, 1, 1], ]) >>> dat[np.cumsum(dat <= 0, 1, dtype='bool')] = 0 >>> print(dat) array([[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [1, 1, 2, 3, 2, 1, 3, 4, 1, 4, 1, 1]]) 

@Jaime просто указал, что np.logical_or.accumulate(dat <= 0, axis=1) , вероятно, лучше, чем np.cumsum.

Возможно, вам или кому-то еще нужно альтернативное решение без использования numpy.

 >>> dat = ['111110011111','112321341411','000000000000', '123456789120'] >>> def zero(dat): result = [] for row in dat: pos = row.find('0') if pos > 0: result.append(row[0:pos] + ('0' * (len(row) - pos))) else: result.append(row) return result >>> res = zero(dat) >>> res ['111110000000', '112321341411', '000000000000', '123456789120'] >>> dat ['111110011111', '112321341411', '000000000000', '123456789120']