如何根据每个记录及其上一个记录过滤NumPy数组

我正在考虑将代码转换为可与NumPy一起使用,并且具有以下功能:

def Clean_One_State(ListsToConvert):
    # Removes duplicate states
    prev_bool = 2
    returnlist = []
    for value in enumerate(ListsToConvert[1:],0):
        if value[1] != prev_bool:
            try:
                returnlist.append(value)
                prev_bool = value[1]
            except IndexError:
                returnlist.append(value)
                prev_bool = value[1]
    return returnlist

该函数在句子中删除输入中与先前记录具有相同状态的记录。 根据您自己的需要,该函数的输入和输出是:

In:[['Event Time','State at A'],[0.0,1],[0.03253,[0.04757,0],[0.08479,[0.98534,[0.98748,[1.03602,[1.03717,[1.95898,[1.96456,[2.00913,[2.01547,0]...
Out: [[0.0,0]...

理想情况下,我希望能够查看输入列表的视图(在NumPy中),以便可以删除将影响输入列表的输出列表中的记录。我在网上看了一些示例,但仍然对如何执行此操作持怀疑态度。

yxm407949656 回答:如何根据每个记录及其上一个记录过滤NumPy数组

一种非常标准的numpy方法是使用高级索引:

data = [['Event Time','State at A'],[0.0,1],[0.03253,[0.04757,0],[0.08479,[0.98534,[0.98748,[1.03602,[1.03717,[1.95898,[1.96456,[2.00913,[2.01547,0]]

# convert to array
ar = np.array([*map(tuple,data[1:])],dtype=[*zip(data[0],(float,int))])
ar
# array([(0.,1),(0.03253,(0.04757,0),(0.08479,#        (0.98534,(0.98748,(1.03602,(1.03717,#        (1.95898,(1.96456,(2.00913,(2.01547,0)],#       dtype=[('Event Time','<f8'),('State at A','<i8')])

# find places where State at A changes and select them from ar
# prepend something that is not equal to the first State at A,so the 
# very first item is also selected
ar[np.diff(ar['State at A'],prepend=ar['State at A'][0]-1).nonzero()]
# array([(0.,(0.98534,#        (1.96456,'<i8')])
本文链接:https://www.f2er.com/3141337.html

大家都在问