如何使用生成器对象的值?

时间:2017-05-10 23:42:15

标签: python pandas

我的数据集有Nx6,其中N是样本数。

当我运行这行代码时:

segments, labels = segment_signal(dataset)

它给出错误:

  

TypeError:无法对< class'pandas.core.indexes.range.RangeIndex'>进行切片索引。使用< class'flora'>

的这些索引器[45.0]

功能段信号的定义如下:

def segment_signal(data,window_size = 90):
    segments = np.empty((0,window_size,3))
    labels = np.empty((0))
    for (start, end) in windows(data['timestamp'], window_size):
        x = data["x-axis"][start:end]
        y = data["y-axis"][start:end]
        z = data["z-axis"][start:end]
        if(len(dataset['timestamp'][start:end]) == window_size):
            segments = np.vstack([segments,np.dstack([x,y,z])])
            labels = np.append(labels,stats.mode(data["activity"][start:end])[0][0])
    return segments, labels

辅助函数:

def windows(data, size):
    start = 0
    while start < data.count():
        yield start, start + size
        start += (size / 2)

我对其进行了问题排查,看起来此行导致错误:

  

x = dataset [“x-axis”] [start:end]

我进一步分析了它,似乎windows()是一个生成器函数。因此,(start, end)中的segment_signal是生成器对象。但由于某些我无法理解的原因,x = dataset["x-axis"][start:end]发生了错误。

问题在于我可以打印startend的值,但我无法使用它们的值。比如说,将它们用作x的索引。

转动startend是浮动的iut。

我刚做int(start)int(end)。但当我做x = dataset["x-axis"][start:end]并得到形状x.shape时,答案是(24,),当它应该是90(因为窗口大小是90.但是当我计算end - start答案仍然是90.当我打印x时,它只有26个元素应该是90.这是为什么?

1 个答案:

答案 0 :(得分:0)

我认为JAV对变量的类型是正确的。试试这个简单的(不确定它是否是最好的)解决方案

for (start, end) in windows(data['timestamp'], window_size):
    start = int(start)
    end = int(end)
    print("check start and end",start,end)

我希望这会有所帮助