cuda - 我可以用 cuda 找到价格地板和天花板吗
问题描述
背景
我正在尝试将算法从顺序转换为并行,但我被卡住了。
点数图
我正在创建点和图图表。
减少
当股票下跌时,每次突破地板时添加一个 O。
增加
当股票上涨时,每次突破上限时添加一个X。
反转
如果股票反转方向,但变化小于反转阈值(3 个单位),则什么也不做。如果变化大于反转阈值,则开始新列(X 或 O)
顺序与并行
因此,这非常简单。我为地板和天花板保留了一个变量。如果当前价格突破了下限或上限,或者变化幅度超过了反转阈值,我可以采取适当的行动。
我的问题是,有没有办法同时找到这些反转点?我对并行思考还很陌生,所以如果这是微不足道的,我很抱歉。我试图在 CUDA 中做到这一点,但我已经被困了好几个星期。我尝试使用 NVidia 的有限差分算法。这些会产生局部最大值/最小值,但不会产生反转点。小的波动会产生大量的相对最大值/最小值,但大多数都是微不足道的,因为变化不大于反转大小。
解决方案
我的问题是,有没有办法同时找到这些反转点?
一种可能的方法:
- 使用推力::unique 删除价格数值恒定的时期
- 使用推力::adjacent_difference 产生第一个差异数据
- 对第一个差分数据使用thrust::adjacent_difference 得到第二个差分数据,即斜率符号发生变化的点。
- 使用这些斜率符号的变化点来识别单独的数据区域 - 从中构建一个关键向量(例如,使用前缀总和)。这个关键向量将价格数据分割成“运行”,其中价格变化在特定方向。
- 在第一个差异数据上使用推力::exclusive_scan_by_key,以产生运行的净变化
- 只要运行的净变化超过阈值,就标记为“反转”
您对什么构成逆转的描述也可能有点不清楚。上述方法不会标记您可能归类为反转的某些数据模式的反转。我怀疑您正在超越我在此处定义的单次运行。如果是这种情况,可能还有一种方法可以解决这个问题——有更多的步骤。
推荐阅读
- android - Why configure Cordova config.xml if I already have a CSP in index.html
- php - Laravel - PDF: Cannot encode text from PDF to Text
- python - 如何从固定集合生成所有不同的固定大小的二维数组?
- java - Thread pool to create set number of threads per second
- javascript - Imacros javascript宏在关闭浏览器后执行命令
- c# - 如何使用 C# 代码从 Windows Server 发布的 Web 应用程序发送和查看电子邮件
- python - 下载文件时如何在每个块之后提交/写入数据,以便它不会使用所有内存?
- asp.net-core - Dotnet 核心自动映射器 orderItems
- python - Geopandas shapefile 轴与实际图片的比例不同
- python - 如何在 Python 中将类实例的属性存储在空字典中?