Python中另一个数组的切片数组给定范围

2024-09-25 08:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

更清楚地说,让我重述一下我最初在下面提出的问题。

我有一系列的数据点,当有人迈出一步,然后又迈出一步时,它们的振幅会上升或下降。当脚离地时为零。

一个简单的例子如下:

 data_array = (0,0,0,10,20,50,40,30,10,0,0,0,0,0,10,20,50,40,30,10,0,0)

我通过记录一个数组中的开始(所有开始的索引)和另一个数组中的停止来确定每个步骤何时开始和停止。

开始=(4 15)

停止=(9 20)

问题是:现在,我想将每个步骤的实际数据从初始数组中分割出来,并将它们分成列。

[注:如有必要,我们知道start或stops数组中的数据量所采取的步骤数。]

2010年

20 20个

50 50个

40 40个

30 30个

2010年

我不知道如何使用这些开始和停止索引来分割初始数组。或者,我没有找到过滤函数来分割步骤。

BTW(第二次编辑) 下面是一些我正在使用的代码,如果有帮助的话:

sigma = 5

threshold = 30

above_threshold = gaussian_filter(Fz, sigma=sigma) > threshold

#---INDEX ALL STATE CHANGES---

ind = np.where(np.diff(above_threshold))[0] + 1

print ind

原始问题

在这种类型的数组中:

data_array = (0,0,0,10,20,50,40,30,10,0,0)

我确定值在20以上和20以下。我将这些索引返回为开始(高于20)和停止(低于20),方法是:

startstop = np.vstack((ind[::2], ind[1::2])).T   
starts1=np.vstack((ind[::2])).T
stops1=np.vstack((ind[1::2])).T

有人能用numpy(或不用)把我指向正确的方向吗?这样我就可以用其中一个数组(startstop,starts1,stops1)提取数据数组中的所有值,得到:

new_array = (50,40,30)

谢谢, 斯科特


Tags: 数据datathresholdnp步骤数组arraysigma
3条回答

我不明白你想怎么做,但你能用filter吗?以下内容:

>>> data_array = (0,0,0,10,20,50,40,30,10,0)
>>> filter(lambda x: x>20,data_array)

(50, 40, 30)

也适用于numpy数组。

take()会做你想做的,我想。

data_array = np.array([0,0,0,10,20,50,40,30,10,0])


b = data_array.take([1,2,3])
print b

输出:

[ 0  0 10]

阅读更多:take()more on take

Python列表是用方括号定义的,我们希望生成一个列表列表(其中每个部分包含一个定义的段)。因为计算机从0开始计数,“第四个元素是开始”转换为数组索引=3。

一个怪癖是,要查询第4到第9个元素,我们将使用data_array[3:9]:这个切片表示法为您提供从指定的第一个元素开始到(但不包括)最后一个元素的每个元素。剩下的是一个列表理解,它遍历任意数量的步骤段。

starts = [4, 15]
stops = [9, 20]
data_array = [0,0,0,10,20,50,40,30,10,0,0,0,0,0,10,20,50,40,30,10,0,0]
segments = [ data_array[starts[i] - 1: stops[i]  ]  for i in range( len(starts) ) ]

回报

>>> segments
[[10, 20, 50, 40, 30, 10], [10, 20, 50, 40, 30, 10]]

每组步骤(段)可单独访问:

>>>segments[0]
[10, 20, 50, 40, 30, 10]

编辑:或者。。。如果需要使用numpy数组,请尝试: segments=array([data_array[starts[i]-1:stops[i]]for i in range(len(starts))])

我尝试在其他模块中直接获取数组(使用itertools.isliceitertools.chainnumpy.fromiter等)。但是,即使这个更奇特的解决方案奏效了,我也不确定它是否比转换成一个数组有显著的速度优势,而且它也不会那么简洁。见:How do I build a numpy array from a generator?

相关问题 更多 >