如何在给定的递增间隔内对数组中的元素进行计数?

2024-10-04 09:22:44 发布

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

我有一个时间值数组。我想知道每个0.05秒窗口中有多少个值。你知道吗

例如,我的数组的一些值是:-1.9493, -1.9433, -1.911 , -1.8977, -1.8671,..

在0.050秒的第一个间隔内(从-1.9493到-1.893),我期望有3个元素

我已经用0.050秒的步长创建了另一个数组。你知道吗

    a=max(array)
    b=min(array)
    ventanalinea1=np.arange(b,a,0.05)
    v1=np.array(ventanalinea1)

换句话说,我想将我的原始数组与这个数组进行比较。你知道吗

我想知道是否有办法让python在给定的动态范围内计算我的数组。你知道吗


Tags: 元素间隔np时间动态数组minarray
2条回答

其中一种变体:

import numpy as np

# original array
a = [-1.9493, -1.9433, -1.911 , -1.8977, -1.8671]

step = 0.05
bounds = np.arange(min(a), max(a) + step, step)

result = [
    list(filter(lambda x: b[i] <= x <= b[i+1], a))
    for i in range(len(b)-1)
]

我发现了一个很酷的python库^{},它大大简化了您的问题:

pip install python-intervals安装它并尝试下面的代码。你知道吗

import intervals as I  

# This is a recursive function
def counter(timevalues, w=0.050):
    if not timevalues:
        return "" # stops recursion when timevalues is empty
    # Make an interval object that provides convenient interval operations like 'contains'
    window = I.closed(
        timevalues[0], timevalues[0] + w)
    interval = list(
        filter(window.contains, timevalues))
    count = len(interval)
    timevalues = timevalues[count:]
    print(f"[{interval[0]} : {interval[-1]}] : {count}")
    return counter(timevalues)


if __name__ == "__main__":
    times = [-1.9493, -1.9433, -1.911, -1.8977, -1.8671]
    print(counter(times))

根据需要调整它,例如,您可能希望返回字典而不是字符串。你知道吗

您仍然可以绕过这个问题而不使用这里的python-intervals库,但我在这里介绍了它,因为在代码中很可能需要其他复杂的操作。你知道吗

相关问题 更多 >