我在python中有以下numpy数组:
[[ True True True ..., True True True]
[ True True True ..., True True False]
[ True True True ..., True False True]
...,
[ True True True ..., True True False]
[ True True True ..., False False True]
[ True True True ..., True True True]]
我想更改数组的值,以便在连续少于三个时使用False'连续的值,要将这些值更改为True,以及当我有三个或更多'False'连续的连续值,只有一个'False'声明
基本上,我希望它最终看起来像这样: 之前:
[[ True True True False True True]
[ True False True True True False]
[ False False False False]
这是我想要的结果:
[[ True True True True True True]
[ True True True True False]
有关如何执行此操作的任何帮助?
由于
答案 0 :(得分:0)
由于您要独立分析每一行,并且行的大小可能会发生变化,因此请忘记这是一个数组。它是一个数组(或列表)列表。解决方案策略是编写一个占用一行,转换它并返回一个新列表的函数。
def process_arow(arow):
<to be determined>
return new_row
[process_arow(arow) for arow in rows]
至于行处理,我的印象是你只需要遍历它,传递一个True,False或者什么都没有。乍一看,我没有多大意义将其视为阵列。也许在我们开始工作之后我们可以把它作为一个(并行)操作,但通常更容易迭代地开发一个想法。
第一次刺伤:
def subfn(newrow,cnt):
if cnt>2:
cnt=1
for i in range(cnt):
newrow.append(False)
return newrow
def process_arow(arow):
newrow=[]; cnt=0
for r in arow:
if r:
newrow=subfn(newrow,cnt)
cnt=0
newrow.append(True)
else:
cnt += 1
return subfn(newrow,cnt)
测试:
In [448]: process_arow([True, True,False, False])
Out[448]: [True, True, False, False]
In [449]: process_arow([True, True,False, False,False])
Out[449]: [True, True, False]
In [450]: process_arow([True, True,False, False,False,True])
Out[450]: [True, True, False, True]
In [451]: process_arow([True, True,False,False,False,True,False,False])
Out[451]: [True, True, False, True, False, False]