news 2026/9/2 17:52:45

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/3 1:23:18

一文看懂openapi-python-client生成的SDK和openai-python库的风格差异

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 两者在底层原理&#xff08;都支持同步/异步、都基于强类型模型、都对…

作者头像 李华
网站建设 2026/9/2 15:47:49

Ubuntu24.04 日常运维合集

食用指南 本文汇总在工作过程中遇到的Ubuntu24.04操作系统运维问题&#xff0c;以便不时之需&#xff0c;每个Q对于一个问题。 Q1. 重置密码 环境&#xff1a;Virtual Box 开机获取鼠标焦点后立即长按 Shift 键&#xff1a; 然后按 e 进入编辑模式&#xff0c;将 “ro quiet …

作者头像 李华
网站建设 2026/9/2 23:30:25

工业零代码平台是什么?能做什么?

低零代码&#xff08;No-Code&#xff09;是可视化应用开发工具,通过拖拽组件、配置参数快速构建应用&#xff0c;降低技术门槛。工业零代码平台是一种专为工业领域设计的应用开发工具&#xff0c;无需编写代码即可通过可视化配置快速构建定制化应用系统。其核心价值在于降低技…

作者头像 李华
网站建设 2026/9/1 6:03:14

四大顶流蛋白质预测模型实战指南:从部署到测试全流程解锁

四大顶流蛋白质预测模型实战指南&#xff1a;从部署到测试全流程解锁 蛋白质结构与功能的精准预测是生物信息学领域的核心难题&#xff0c;也是药物研发、疾病机制解析的关键突破口。随着AI技术的爆发&#xff0c;ESM2、ScanNet、RFdiffusion、RoseTTAFold-All Atom等前沿模型…

作者头像 李华
网站建设 2026/9/2 16:38:17

MindSpore 2.0 函数式编程与Ascend图模式加速指南

在昇腾&#xff08;Ascend&#xff09;计算产业生态中&#xff0c;MindSpore作为核心AI框架&#xff0c;其最大的优势在于“端边云协同”以及与Ascend硬件的深度融合。对于开发者而言&#xff0c;从MindSpore 1.x的面向对象编程过渡到MindSpore 2.x的函数式编程&#xff08;Fun…

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

《Java数据结构与算法》第四篇(三)二叉树遍历详解_CSDN文章

Java数据结构之树&#xff1a;二叉树的三种遍历方法详解&#xff08;递归与非递归实现&#xff09; 目录 一、二叉树遍历的定义与重要性二、前序遍历&#xff08;DLR&#xff09;详解三、中序遍历&#xff08;LDR&#xff09;详解四、后序遍历&#xff08;LRD&#xff09;详解…

作者头像 李华