我有一個MxN數組。我想在一行中的元素爲零或更少之後將所有值清零。當0或更低時爲真,則將陣列行的其餘部分清零
例如,2×12陣列
111110011111
112321341411
應該變成
111110000000
112321341411
謝謝!
我有一個MxN數組。我想在一行中的元素爲零或更少之後將所有值清零。當0或更低時爲真,則將陣列行的其餘部分清零
例如,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']
請提供您已經嘗試過的東西的例子。你在用'numpy'數組嗎? – dursk 2014-10-06 00:48:37