Python 当0或更低为真时,将数组行的其余部分归零

Python 当0或更低为真时,将数组行的其余部分归零,python,arrays,numpy,Python,Arrays,Numpy,我有一个MxN阵列。我想在一行中的一个元素为零或更小之后,将所有值归零 例如,2x12阵列 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],

我有一个MxN阵列。我想在一行中的一个元素为零或更小之后,将所有值归零

例如,2x12阵列

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]])
>>将numpy作为np导入
>>>dat=np.数组([[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.累计(dat>>打印(dat)
数组([[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_或.accumulate(dat可能是您或其他人需要不使用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']

请提供一个您已经尝试过的示例。您使用的是
numpy
数组吗?最初我忘了您可以在cumsum中指定dtype。我更新了答案以包含这一点。这样做可能是一种非常有效的方法。布尔索引的使用很好,+1。虽然结果是相同的,但我认为它更有效适合将布尔掩码计算为
np.logical\u或.accumulate(dat