news 2026/9/24 17:21:20

Finance利用 高斯溅射和 等值面提取技术可视化金融数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Finance利用 高斯溅射和 等值面提取技术可视化金融数据

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①高斯泼溅的意义及用法


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonCore import vtkPoints, vtkFloatArray from vtkmodules.vtkCommonDataModel import vtkUnstructuredGrid from vtkmodules.vtkImagingHybrid import vtkGaussianSplatter from vtkmodules.vtkFiltersCore import vtkContourFilter, vtkTubeFilter from vtkmodules.vtkFiltersGeneral import vtkAxes from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def read_file(filename): res = {} with open(filename) as ifn: k = '' v = list() for line in ifn: cl = ' '.join(line.split()).split() if cl: if len(cl) == 2 and cl[0] == 'NUMBER_POINTS': k = cl[0] v = [int(cl[1])] has_key = True continue if len(cl) == 1 and not has_key: has_key = True k = cl[0] v = list() else: v += map(float, cl) else: if has_key: # Normalise the data. minimum = min(v) maximum = max(v) # Emulate the bug in the C++ code. for i in v: if i > minimum: maximum = i if maximum != minimum: res[k] = list(map(lambda x: minimum + x / (maximum - minimum), v)) else: res[k] = v has_key = False return res def make_dataset(filename, keys): res = read_file(filename) if res: newPts = vtkPoints() newScalars = vtkFloatArray() xyz = list(zip(res[keys[1]], res[keys[2]], res[keys[3]])) # shape = 3188 * 3 for i in range(0, res[keys[0]][0]): newPts.InsertPoint(i, xyz[i]) newScalars.InsertValue(i, res[keys[4]][i]) dataset = vtkUnstructuredGrid() dataset.SetPoints(newPts) dataset.GetPointData().SetScalars(newScalars) return dataset def main(): colors = vtkNamedColors() colors.SetColor("PopColor", [230, 230, 230, 255]) fileName = "Data/financial.txt" keys = ['NUMBER_POINTS', 'MONTHLY_PAYMENT', 'INTEREST_RATE', 'LOAN_AMOUNT', 'TIME_LATE'] dataSet = make_dataset(fileName, keys) """ 高斯泼溅 用于将离散的点云数据转换成连续的体数据(或图像) 工作原理: 想象一下你有一张纸,上面随机散落着一些点。你想用这些点来描绘出一片连续的区域密度。高斯溅射就是这么做的: 高斯核(Gaussian Kernel): 想象在每一个输入数据点的位置,你放置了一个高斯钟形曲线(类似于正态分布的形状),这就是高斯核。 溅射(Splatting): 这个高斯核就像一个“墨滴”,它将自己的**值(密度或权重)**向周围区域扩散。离点越近,贡献的密度值越高;离点越远,贡献的值越低。 累积求和: 在你设定的 3D 网格(或 2D 图像)中的每个位置(像素或体素),所有输入点的高斯核贡献的密度值都会被累加起来。 最终输出: 最终的输出是一个新的数据集(通常是 vtkImageData),它的值代表了原始点云在空间中的局部密度。数据点密集的地方,输出值就高;数据点稀疏的地方,输出值就低 """ popSplatter = vtkGaussianSplatter() popSplatter.SetInputData(dataSet) popSplatter.SetSampleDimensions(100, 100, 100) # SetRadius 设置高斯核半径 popSplatter.SetRadius(.05) """ ScalarWarpingOff/On 标量变形与否 输入点的标量值(例如,颜色或温度)会用来缩放高斯核的高度。 这使得高斯溅射不仅反映点的位置密度,还反映标量值的总和或平均分布 """ popSplatter.ScalarWarpingOff() popSurface = vtkContourFilter() popSurface.SetInputConnection(popSplatter.GetOutputPort()) popSurface.SetValue(0, 0.01) popMapper = vtkPolyDataMapper() popMapper.SetInputConnection(popSurface.GetOutputPort()) popMapper.ScalarVisibilityOff() popActor = vtkActor() popActor.SetMapper(popMapper) popActor.GetProperty().SetOpacity(0.3) popActor.GetProperty().SetColor(colors.GetColor3d('PopColor')) popSplatter.Update() lateSplatter = vtkGaussianSplatter() lateSplatter.SetInputData(dataSet) lateSplatter.SetSampleDimensions(50, 50, 50) lateSplatter.SetRadius(0.05) """ SetScaleFactor 控制输出密度场的整体强度或大小 当你调用 SetScaleFactor(value) 时,VTK 会执行以下操作: 最终密度=高斯核贡献的总和×value 如果 value > 1.0: 输出密度场的值会整体增大。这会使你提取等值面(Contour)时,更容易在较低的等值面值上获得一个更大的曲面。 如果 value < 1.0: 输出密度场的值会整体减小。这使得密度场更“稀疏”,你需要提取一个更低的值才能获得一个可见的曲面。 逾期贷款只是总人口中的一个子集,点的数量要少得多。如果使用默认的 1.0 缩放因子,它们生成的密度场可能非常弱,难以提取出有意义的等值面。 """ lateSplatter.SetScaleFactor(0.005) lateSurface = vtkContourFilter() lateSurface.SetInputConnection(lateSplatter.GetOutputPort()) lateSurface.SetValue(0, 0.01) lateMapper = vtkPolyDataMapper() lateMapper.SetInputConnection(lateSurface.GetOutputPort()) lateMapper.ScalarVisibilityOff() lateActor = vtkActor() lateActor.SetMapper(lateMapper) lateActor.GetProperty().SetColor(colors.GetColor3d('Red')) bounds = popSplatter.GetOutput().GetBounds() axes = vtkAxes() # SetOrigin 设置原点坐标 axes.SetOrigin(bounds[0], bounds[2], bounds[4]) # xmin,ymin, zmin # SetScaleFactor 设置坐标轴(vtkAxes)的长度 axes.SetScaleFactor(popSplatter.GetOutput().GetLength() / 5) # axes.GetOutput() -> PolyData axesTubes = vtkTubeFilter() axesTubes.SetInputConnection(axes.GetOutputPort()) axesTubes.SetRadius(axes.GetScaleFactor() / 25.0) axesTubes.SetNumberOfSides(6) axesMapper = vtkPolyDataMapper() axesMapper.SetInputConnection(axesTubes.GetOutputPort()) axesActor = vtkActor() axesActor.SetMapper(axesMapper) # Graphics stuff. renderer = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(renderer) interactor = vtkRenderWindowInteractor() interactor.SetRenderWindow(renWin) # Set up the renderer. renderer.AddActor(lateActor) renderer.AddActor(axesActor) renderer.AddActor(popActor) renderer.SetBackground(colors.GetColor3d('Wheat')) renWin.SetSize(640, 480) renWin.SetWindowName('Finance') renderer.ResetCamera() renderer.GetActiveCamera().Dolly(1.3) renderer.ResetCameraClippingRange() # Interact with the data. renWin.Render() interactor.Start() print("") if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 19:55:17

三相PWM整流器闭环仿真:从理论到实践

三相PWM整流器闭环仿真&#xff0c;电压电流双闭环控制&#xff0c;输出直流电压做外环 模型中包含主电路&#xff0c;坐标变换&#xff0c;电压电流双环PI控制器&#xff0c;SVPWM控制&#xff0c;PWM发生器 matlab/simulink模型 功率因数1&#xff0c;低THD仅1.2% 模型输出电…

作者头像 李华
网站建设 2026/9/24 10:46:20

AI原生测试引擎:Katalon TrueTest重塑软件测试

在软件发布节奏不断加快的今天,测试团队常常面临一个核心矛盾:如何在不增加人力负担和脚本维护成本的前提下,保证应用的可靠性与测试覆盖率。传统基于脚本的自动化测试方法虽然有效,但其创建、维护的瓶颈以及难以覆盖真实用户复杂行为的问题日益凸显。 什么是TrueTest? …

作者头像 李华
网站建设 2026/9/1 11:29:36

GraniStudio:思维导图式零代码开发软件平台

GraniStudio 是苏州格拉尼视觉科技自主研发的工业级零代码开发平台&#xff0c;专为自动化设备软件开发设计&#xff0c;集运动控制、机器视觉、数据采集、HMI 设计等功能于一体。GraniStudio 的思维导图式开发模式打破了传统代码的线性思维&#xff0c;采用 “资源配置→流程设…

作者头像 李华
网站建设 2026/9/25 1:19:53

7、深入了解Samba:Windows客户端配置与SMB/CIFS协议解析

深入了解Samba:Windows客户端配置与SMB/CIFS协议解析 1. 配置Windows NT 4.0计算机以使用Samba 要在Windows NT 4.0计算机上使用Samba,需要安装工作站服务和TCP/IP协议。以下是基本步骤: 1. 为计算机命名 2. 安装工作站服务 3. 安装TCP/IP协议 4. 设置计算机名称和IP地…

作者头像 李华
网站建设 2026/9/25 1:19:45

10、Samba 网络配置、虚拟服务器与日志管理全解析

Samba 网络配置、虚拟服务器与日志管理全解析 1. Samba 网络配置选项 1.1 网络配置背景 当在多宿主机器(即连接多个子网的机器)上运行 Samba 时,或者想要在自己的子网中实施安全策略,就需要仔细考虑网络配置选项。假设 Samba 服务器连接到包含多个子网的网络,如能访问 …

作者头像 李华