相较于在列表或数组中找出所有大于特定
如果一个阈值为2,那么
会给我所有大于阈值的
这给了我我想要的结果,即
在MATLAB中,我会类似地做。
有没有更高效(更快)的方法来执行这个计算?
如果我在Python中生成数据,例如:
"计时,这些值的计算花了4.45秒。如果我在MATLAB中生成数据。"
执行该程序仅需0.92秒。为什么MATLAB执行此任务比Python快近5倍?感谢您提前的评论!
阈值
的样本/数据点,我希望仅找出第一次信号
超过阈值
时的样本。信号可能会多次穿过阈值。例如,如果我有一个示例信号:signal = [1, 2, 3, 4, 4, 3, 2, 1, 0, 3, 2, 1, 0, 0, 1, 1, 4, 8, 7, 6, 5, 0]
如果一个阈值为2,那么
signal = numpy.array(signal)
is_bigger_than_threshold = signal > threshold
会给我所有大于阈值的
signal
中的值。然而,我只想在信号第一次变大于阈值时获取前几个样本。因此,我要遍历整个列表,并进行布尔比较。first_bigger_than_threshold = list()
first_bigger_than_threshold.append(False)
for i in xrange(1, len(is_bigger_than_threshold)):
if(is_bigger_than_threshold[i] == False):
val = False
elif(is_bigger_than_threshold[i]):
if(is_bigger_than_threshold[i - 1] == False):
val = True
elif(is_bigger_than_threshold[i - 1] == True):
val = False
first_bigger_than_threshold.append(val)
这给了我我想要的结果,即
[False, False, True, False, False, False, False, False, False, True, False, False, False,
False, False, False, True, False, False, False, False, False]
在MATLAB中,我会类似地做。
for i = 2 : numel(is_bigger_than_threshold)
if(is_bigger_than_threshold(i) == 0)
val = 0;
elseif(is_bigger_than_threshold(i))
if(is_bigger_than_threshold(i - 1) == 0)
val = 1;
elseif(is_bigger_than_threshold(i - 1) == 1)
val = 0;
end
end
first_bigger_than_threshold(i) = val;
end % for
有没有更高效(更快)的方法来执行这个计算?
如果我在Python中生成数据,例如:
signal = [round(random.random() * 10) for i in xrange(0, 1000000)]
"计时,这些值的计算花了4.45秒。如果我在MATLAB中生成数据。"
signal = round(rand(1, 1000000) * 10);
执行该程序仅需0.92秒。为什么MATLAB执行此任务比Python快近5倍?感谢您提前的评论!