如何在python上更改数组中的值

时间:2015-12-13 19:52:00

标签: python python-2.7 numpy

我在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]

有关如何执行此操作的任何帮助?

由于

1 个答案:

答案 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]