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