首页 > 解决方案 > 如何创建一个无限浮点数生成器以用作另一个函数的输入

问题描述

我想模拟一个无限浮点数流。如果可能的话,我想每 10 秒添加 1 个样本。

让我们称之为stream_data

我想每次stream_data生成100个样本并存储这个计算的结果。

当流达到 100 个样本时,块函数(定义如下)将创建 2 个块(列表或数组),每个块有 50 个样本。

chunk_1 = 50 samples
chunk_2 = 50 samples

从输入中获取样本的块生成器stream_data

def chunks(stream_data, n):
    """Yield successive n-sized chunks from array."""
    for i in range(0, len(stream_data), n):
        yield stream_data[i:i + n]

然后在stream_data生成前100 个样本后,我们将使用chunks function创建2 个数组或每个 50 个样本的列表:

然后计算大小为 50 的样本的标准差差:

std_results = []

# This line is just using the chunks function and it's 
# initiate when the stream_data reaches 100 samples.
for x in chunks(stream_data, 50):
    a = np.std(chunk_1)
    b = np.std(chunk_2)
    c = a - b
    std_results.append(c)
    # wait for next samples

这个过程应该一直运行到我中止,所以将遵循这个过程:

  1. 启动stream_data生成器 --> x 秒时 1 个样本
  2. 一旦 stream_data 达到大小 100,块函数将创建 2 个块,每个块 50 个元素
  3. function2 将获取这 2 个块并按照说明执行计算。
  4. 将结果附加到std_results
  5. 一旦stream_data达到另外 100 个样本,该过程就会重复。

我不需要在执行计算后存储生成的浮点数,所以如果有办法清理它们以节省内存会很好。

到目前为止我做了什么

如上所述,我已准备好块功能。我认为它现在可以使用。

我知道我可以使用while true.

下面的代码每 5 秒生成一个随机 int 并生成块,但我不知道如何重新开始接下来的 4 个(4 个以使其更快)样本:

import time
result = []
lista = []
starttime = time.time()
while True:
    stream = np.random.randint(1,100)
    result.append(stream)
    print(result)
    if len(result) == 4:
        w=chunks(result,2)
        lista.append(w)
        print(lista)
        
    time.sleep(5.0 - ((time.time() - starttime) % 5.0))

标签: pythonpython-3.xlazy-evaluationdata-stream

解决方案


推荐阅读