在pylab程序中(也可能是matlab程序),我有一个代表距离的数字的numpy数组:d[t]
是时间的
距离t
(我的数据的时间跨度是len(d)
时间单位)。
我感兴趣的事件是当距离低于某个阈值时,我想计算这些事件的持续时间。使用轻松获得布尔数组很容易b = d<threshold
,问题归结为计算中的True-
only单词的长度顺序b
。但是我不知道如何有效地做到这一点(即使用numpy原语),我求助于遍历数组并进行手动更改检测(即,当值从False变为True时初始化计数器,只要value为True便增加计数器,并在值返回False时将计数器输出到序列中。但这非常慢。
如何有效地检测numpy数组中的那种序列?
以下是一些说明我的问题的python代码:第四个点需要很长时间才能显示(如果没有,请增加数组的大小)
from pylab import *
threshold = 7
print '.'
d = 10*rand(10000000)
print '.'
b = d<threshold
print '.'
durations=[]
for i in xrange(len(b)):
if b[i] and (i==0 or not b[i-1]):
counter=1
if i>0 and b[i-1] and b[i]:
counter+=1
if (b[i-1] and not b[i]) or i==len(b)-1:
durations.append(counter)
print '.'
虽然不是numpy
原始itertools
函数,但函数通常非常快,因此请尝试一下(当然要测量包括该函数在内的各种解决方案的时间):
def runs_of_ones(bits):
for bit, group in itertools.groupby(bits):
if bit: yield sum(group)
如果确实需要列表中的值,那么当然可以使用list(runs_of_ones(bits));但也许列表理解仍然会稍微快一些:
def runs_of_ones_list(bits):
return [sum(g) for b, g in itertools.groupby(bits) if b]
转向“ numpy-native”的可能性,那么:
def runs_of_ones_array(bits):
# make sure all runs of ones are well-bounded
bounded = numpy.hstack(([0], bits, [0]))
# get 1 at run starts and -1 at run ends
difs = numpy.diff(bounded)
run_starts, = numpy.where(difs > 0)
run_ends, = numpy.where(difs < 0)
return run_ends - run_starts
再说一遍:请确保在为您量身定制的示例中将解决方案彼此作为基准!
问题内容: 如何找到二维数组中的行和列数? 例如, 应该显示为3行2列。 问题答案: 像这样: 假定所有子列表具有相同的长度(也就是说,它不是锯齿状的数组)。
问题内容: 在使用pygame编写的图形程序中,我使用表示如下坐标的元组:(50,50)。 有时,我调用一个函数,该函数返回另一个元组,例如(3,-5),它表示坐标的变化。 将更改值添加到坐标值的最佳方法是什么。如果可以做一些坐标+ = change的工作,那将是很好的选择,但是看起来这将把两个元组简单地连接为(50,50,3,-5)之类的东西。而不是将第一个值与第一个值相加,将第二个值与第二个值
我需要编写一个递归方法,将int作为输入,并以int(而不是字符串)的形式返回其中最长的相同数字序列。计数序列并不是最难的部分,但当给定一个包含几个序列的数字时,我不知道如何返回正确的值,而不计算所有的序列,而只计算最长的序列。目前,我编写了一段只计算序列长度的代码: 我真的很难完成剩下的事情。
我需要帮助确定R中观察组中最长的连续值序列(=1)。 我有城镇月降雨量的数据。我需要确定每年月降雨量高于年平均值的最长时期(rain_above = 1)。如果每年有两个等长的时期,我想确定总降雨量最大的时期。 一些示例数据: 在df,A镇在2000年的第4个月到第8个月之间有一个雨季。这是rain_above=1的唯一时期。 B镇在2001年有一个雨季,在第1个月和第3个月之间。尽管有两个长度相
本文向大家介绍查找所有元组在Python中是否具有相同的长度,包括了查找所有元组在Python中是否具有相同的长度的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将找出给定列表中的所有元组是否具有相同的长度。 与伦 我们将使用len函数并将其结果与我们正在验证的给定值进行比较。如果值相等,那么我们认为它们的长度相同,否则就不一样。 示例 输出结果 运行上面的代码给我们以下结果- 与所有人和
这里,在这段代码中,它打印序列的最大子序列的长度,该序列先增加后减少,或者反之亦然。 例如: 输入:1,11,2,10,4,5,2,1 如增-减-增或减-增-减 示例: 投入:7 16 1 6 20 17 7 18 25 1 25 21 11 5 29 11 3 3 26 19
我有这个问题: 您将获得一个整数 A 和一个整数 k 的数组。您可以将 A 的元素递减到 k 次,目标是生成一个元素都相等的连续子数组。返回可以用这种方式生成的最长的连续子数组的长度。 例如,如果 A 是 [1,7,3,4,6,5] 并且 k 是 6,那么您可以生成 [1,7,3,4-1,6-1-1-1,5-1-1] = [1,7,3,3,3,3],因此您将返回 4。 最佳解决方案是什么?
问题内容: 我声明了一个数组,如下所示: 然后,我为数组分配了以下值: 然后,我声明并初始化了一个整数变量: 这对于查找实际大小将很有用,但是有什么方法可以找到数组的逻辑大小吗? 问题答案: 它包含分配的大小。未分配的指标将包含默认值,即对。