python - 如何创建一个无限浮点数生成器以用作另一个函数的输入
问题描述
我想模拟一个无限浮点数流。如果可能的话,我想每 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
这个过程应该一直运行到我中止,所以将遵循这个过程:
- 启动
stream_data
生成器 --> x 秒时 1 个样本 - 一旦 stream_data 达到大小 100,块函数将创建 2 个块,每个块 50 个元素
- function2 将获取这 2 个块并按照说明执行计算。
- 将结果附加到
std_results
- 一旦
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))
解决方案
推荐阅读
- xml - SAXParseException:未能读取架构文档“http://www.springframework.org/schema/context/spring-context.xsd”
- php - 仅当两个 CSV 文件中都存在 CSV 数据时才打印出来
- java - 有没有办法在没有 BitmapFonts 的情况下在 libgdx 中绘制字符串?
- node.js - “路径”参数必须是字符串类型。接收到的类型对象 - Angular 7
- android - ConstraintLayout - 当文本换行发生时,它将“推开”ImageView。如何避免这种行为?
- symfony - Symfony + FOSRestBundle - 如何允许 NULL 值到配置有自定义表单类型的字段?
- reactjs - 在 ReactJs 中,从 redux 存储或从父级到子级将 props 传递给子组件的最佳实践是什么?
- python - 通过queryset限制在sql调用中查询的django字段到数据库
- elasticsearch - 使用 Elastic4s 客户端查找索引中特定字段的所有不同值
- laravel - 如何进行503退货?