将平面拟合到 3D 中的一组点:scipy.optimize.minimize 与 scipy.linalg.lstsq

2024-01-27

给定一组 3D 点,一般问题是找到a, b, c平面方程的系数,形式为:

z = a*x + b*y + c

这样得到的平面就是best fit可能到那组点。

  1. In 这个答案 https://stackoverflow.com/a/20700063/1391441, 功能scipy.优化.最小化 http://docs.scipy.org/doc/scipy-0.16.1/reference/generated/scipy.optimize.minimize.html就是用来解决这个问题的。

    它依赖于对系数的初始猜测,并最小化误差函数,该误差函数将每个点到平面表面的距离相加。

  2. In 这段代码 https://gist.github.com/amroamroamro/1db8d69b4b65e8bc66a6(基于这另一个答案 https://stackoverflow.com/a/18648210/97160) the scipy.linalg.lstsq http://docs.scipy.org/doc/scipy-0.16.1/reference/generated/scipy.linalg.lstsq.html函数用于解决相同的问题(当限制为一阶多项式时)。

    它解决了C在等式中z = A*C, where A是的串联x,y点集的坐标,z is the z集合的坐标,以及Ca,b,c系数。

    与上述方法中的代码不同,该方法似乎不需要对平面系数进行初始猜测。

自从minimize函数需要初始猜测,这意味着它可能会也可能不会收敛到最优解(取决于猜测的好坏)。第二种方法是否有类似的警告,或者它会返回始终精确的解决方案?


最小二乘法 (scipy.linalg.lstsq) 保证收敛。事实上,存在一个封闭形式的解析解(由下式给出)(A^T A)^-1 A^Tb (where ^T是矩阵转置并且^-1是矩阵求逆)

然而,标准优化问题通常无法解决 - 我们不能保证找到最小化值。然而,对于给定的方程,找到一些a, b, c这样z = a*x + b*y + c,我们有一个线性优化问题(约束和目标在我们尝试优化的变量中是线性的)。线性优化问题一般是可解的,所以scipy.optimize.minimize应该收敛到最优值。

注意:即使我们这样做,这在我们的约束中也是线性的z = a*x + b*y + d*x^2 + e*y^2 + f——我们不必将自己限制在线性空间中(x,y),因为我们将有这些点(x, y, x^2, y^2)已经。对于我们的算法来说,这些看起来就像矩阵中的点A。所以我们实际上可以使用最小二乘法得到更高阶多项式!

简要说明一下:实际上,所有不使用精确解析解的求解器通常都会停止在实际答案的某个可接受的范围内,因此我们很少会得到exact解,但它往往非常接近,以至于我们在实践中认为它是精确的。此外,即使是最小二乘求解器也很少使用解析解,而是采用更快的方法,例如牛顿法。

如果你要改变优化问题,情况就不是这样了。对于某些类别的问题,我们通常可以找到最佳值(其中最大的一类称为凸优化问题 - 尽管有许多非凸问题,我们可以在某些条件下找到最佳值)。

如果您有兴趣了解更多信息,请查看凸优化 https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf博伊德和范登堡。第一章不需要太多的数学背景,它概述了一般优化问题以及它与可解优化问题(如线性和凸规划)的关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将平面拟合到 3D 中的一组点:scipy.optimize.minimize 与 scipy.linalg.lstsq 的相关文章

  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 使用 Python pandas 计算调整后的成本基础(股票买入/卖出的投资组合分析)

    我正在尝试对我的交易进行投资组合分析 并尝试计算调整后的成本基础价格 我几乎尝试了一切 但似乎没有任何效果 我能够计算调整后的数量 但无法获得调整后的购买价格有人可以帮忙吗 这是示例交易日志原始数据 import pandas as pd
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户

随机推荐

  • 如何获取两个S3存储桶之间的文件差异?

    因此 我有一个 S3 视频桶 数百个 我使用 Elastic Transcoder 将所有内容转码到第二个优化的桶中 但是 当我检查第二个存储桶时 发现少了 40 50 个对象 但我无法弄清楚它们是什么 目录结构深度嵌套等 如何使用以下命令
  • 在 ASP.Net Core 5 WebAPI 中启用 CORS

    有数百万篇文章和问题与此问题相关 但我找不到我的代码有什么问题 我有Startup StartupProduction and StartupDevelopment如下 另外 我正在使用ASP Net Core 5 并基于文档 https
  • 如何在按钮单击时添加输入字段

    function add var new chq no parseInt total chq val 1 var new input
  • Postgres 添加具有初始计算值的列

    我正在寻找向预先存在的表添加一个新列 该表填充了值 新专栏将是NOT NULL 因此对于每个预先存在的行 它都需要一个值 我正在寻找此列上的初始值 该初始值是根据创建列时表中的其他值计算的 并且only在创建列时 我有一个非常具体的用例 所
  • Chrome 扩展未加载/在检查器/开发工具中无法选择代码环境

    我正在开发一个 chrome 扩展来使用 jQuery 突出显示 Facebook 通知 当 Facebook 第一次加载时 我可以让它加载 但过了一会儿它就停止工作了 在清单中我尝试将持久设置为 true 和 false 没有区别 我尝试
  • Go 中的模拟随机生成器

    出于测试目的 我想在 Go 中模拟随机数 所以我创建了随机界面 在单元测试期间 我返回恒等函数 而在实现过程中 我使用 rand 包生成一个随机数 这是在 Go 中模拟随机数的正确方法吗 任何帮助表示赞赏 去游乐场 https play g
  • 相同域请求的 Origin 和 Host 标头

    我们有 RESTful JSON 端点来服务 AJAX 请求 希望支持跨源资源共享 我们正在锁定一切 以确保我们不必担心跨站请求伪造 CSRF 攻击 我们使用的部分方法是检查 Origin 标头是否存在 并验证它是否包含在已批准的 Orig
  • 如何使用 slug 从类别中获取帖子?

    我有自己的主题 我想在我的主页上显示特定类别的帖子 到目前为止 我已经实现了这样的目标
  • cakePHP 中的时间重定向?

    header 刷新 5 url pagetoredirect php 如果我们想在 5 秒内重定向我们的页面 我们可以使用它 cakephp 有没有办法在 5 秒内重定向页面 如果是 请告诉我 你可以尝试使用AppControllerhea
  • 将 package.json 中的 proxy 设置为 env 变量

    我需要设置proxy我的价值package json在运行时 就像使用环境变量一样 这怎么可能做到呢 package json name demo proxy process env MY PROXY VAL lt how dependen
  • 如何在Unity和C#中延迟一个方法?

    我的名字是 Laurenz 我的问题是如何使用 c 延迟 Unity 中精灵的颜色变化 现在我有一个随机生成器 它根据数字选择颜色 但这种情况每帧都会发生 所以现在真正的挑战是如何延迟它以减少它的变化 public class colorc
  • 什么控制 WSDL 的肥皂地址位置中使用的 url?

    我正在通过来自iis 6的https公开wcf服务 据我所知 我已经验证了iis中的绑定设置正确 是的 肯定站点id为 1 并且已完成iisreset 当我运行这个时 C Program Files x86 Microsoft Visual
  • 为什么 HTML5 视频无法在 IOS 8 WebApp(webview) 中播放?

    简单的 HTML5 视频可以在 Safari 浏览器上播放 但将其添加到主屏幕 独立Web应用程序 后 它不起作用 它可以在 iOS7 上运行 但在 iOS8 上停止运行
  • 如何从不同的 swift 文件调用函数

    我的 Xcode 6 beta 2 项目中有多个 UIViewController 类型的 swift 文件 我基本上想知道文件 A 中的一些数据以便在文件 B 中使用 我的文件都是 UIViewController 并且我创建了一个没有参
  • 如何使用VBA自动化多个Office应用程序?

    虽然我已经在 MS Access 2007 和 Excel 2007 的单个应用程序中完成了 VBA 项目 但我还没有同时自动化多个应用程序 广义的项目是开放访问 运行一些更新查询 将数据附加到各种表 然后Excel需要获取数据 Excel
  • bash:jar:找不到命令

    我在用着Jenkins部署构建 我们需要从 a 中提取文件 war进入某个目录 我们有一个 xml文件 其中包含从以下位置提取文件的命令 war文件并启动服务器 构建正在正确创建 但是 war提取未发生 目标文件夹留空 Jenkins 控制
  • Appium服务器未检测到通过wifi连接的设备

    did adb tcpip 5555 and adb connect ipaddress The adb devices显示设备 但是当我运行 appium 服务器时 它显示没有连接 Android 设备 appium python代码是
  • 什么是 Packrat 解析?

    我知道并使用 bison yacc 但在解析世界中 围绕 Packrat 解析有很多讨论 它是什么 值得学习吗 Packrat 解析是一种提供渐近更好的性能 for 解析表达式语法 http en wikipedia org wiki Pa
  • 从 Firestore 导出 json

    由于我们可以在Firebase RTDB控制台下载json文件 有什么方法可以导出Firestore集合 文档数据的json文件 我的主要目标之一是比较更新文档之前 之后的数据 谷歌让它变得比需要的更加困难 所以社区找到了一个解决方法 如果
  • 将平面拟合到 3D 中的一组点:scipy.optimize.minimize 与 scipy.linalg.lstsq

    给定一组 3D 点 一般问题是找到a b c平面方程的系数 形式为 z a x b y c 这样得到的平面就是best fit可能到那组点 In 这个答案 https stackoverflow com a 20700063 1391441