用python计算梯度

2024-04-07

我想知道如何numpy.gradient工作。 我用梯度来尝试计算群速度(波包的群速度是频率相对于波数的导数,而不是一组速度)。我向它提供了一个 3 列数组,前 2 列是 x 和 y 坐标,第三列是该点 (x,y) 的频率。我需要计算梯度,我确实期望一个二维向量,即梯度定义

df/dx*i+df/dy*j+df/dz*k 

我的函数只是 x 和 y 的函数,我确实期望类似的东西

df/dx*i+df/dy*j 

但我有 2 个数组,每个数组有 3 列,即 2 个 3d 向量;起初我认为两者的和会给我我正在搜索的向量,但 z 分量并没有消失。我希望我的解释足够清楚。我想知道如何numpy.gradient有效,如果它是解决我的问题的正确选择。否则我想知道是否还有其他我可以使用的 python 函数。

我的意思是:我想计算值数组的梯度:

data=[[x1,x2,x3]...[x1,x2,x3]]

其中 x1,x2 是均匀网格上的点坐标(我在布里渊区上的点),x3 是该点的频率值。我在输入中还给出了两个方向的推导步骤:

stepx=abs(max(unique(data[:,0])-min(unique(data[:,0]))/(len(unique(data[:,0]))-1)

y 方向相同。 我没有在网格上构建数据,我已经有了一个网格,这就是为什么这里给出的答案中的示例对我没有帮助。 一个更合适的例子应该有一个由点和值组成的网格,就像我所拥有的那样:

data=[]
for i in range(10):
  for j in range(10):
    data.append([i,j,i**2+j**2])

data=array(data,dtype=float)

gx,gy=gradient(data)

我可以补充的另一件事是,我的网格不是方形的,而是具有多边形的形状,即二维晶体的布里渊区。

我已经明白了numpy.gradient仅在值的方形网格上正常工作,而不是我正在寻找的。即使我将数据作为网格,在原始数据的多边形之外有很多零,这也会向我的梯度添加非常高的向量,从而影响(负面)计算的精度。在我看来,这个模块更像是一个玩具,而不是一个工具,恕我直言,它有严重的局限性。 python中有更强大的东西,或者我最好从头开始编写其他东西,也许可以切换到fortran?


你需要给予gradient描述您的角频率值的矩阵(x,y)点。例如

def f(x,y):
    return np.sin((x + y))
x = y = np.arange(-5, 5, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array([f(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)

gx,gy = np.gradient(Z,0.05,0.05)

您可以看到,将 Z 绘制为曲面可以得出:

以下是如何解释梯度:

gx是一个给出变化的矩阵dz/dx在所有点。例如gx[0][0] 是dz/dx at (x0,y0)。可视化gx有助于理解:

由于我的数据是从生成的f(x,y) = sin(x+y)gy 看起来一样。

这是一个更明显的例子f(x,y) = sin(x)...

f(x,y) enter image description here

和梯度

update让我们看一下 xy 对。

这是我使用的代码:

def f(x,y):
    return np.sin(x)
x = y = np.arange(-3,3,.05)
X, Y = np.meshgrid(x, y)
zs = np.array([f(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
xy_pairs = np.array([str(x)+','+str(y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
xy_pairs = xy_pairs.reshape(X.shape)

gy,gx = np.gradient(Z,.05,.05)

现在我们可以看看到底发生了什么。假设我们想知道哪个点与该值相关Z[20][30]?然后...

>>> Z[20][30]
-0.99749498660405478

重点是

>>> xy_pairs[20][30]
'-1.5,-2.0'

是对的吗?让我们检查。

>>> np.sin(-1.5)
-0.99749498660405445

Yes.

此时我们的梯度分量是什么?

>>> gy[20][30]
0.0
>>> gx[20][30]
0.070707731517679617

那些检查出来了吗?

dz/dy always 0 check. dz/dx = cos(x) and...

>>> np.cos(-1.5)
0.070737201667702906

看起来不错。

你会注意到它们并不完全正确,那是因为我的 Z 数据不连续,步长为0.05 and gradient只能近似估计变化率。

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

用python计算梯度 的相关文章

  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s

随机推荐

  • FragmentTransaction.remove 没有效果

    我的要求非常简单 我有一个按钮可以逐个片段地替换片段 这听起来很容易并且几乎可行 最大的问题是旧片段没有被删除 新片段被放置在旧片段的前面 并且它们在我的布局中 生活 在一起 代码 FragmentManager fragMgr a get
  • Xamarin Forms 4.1.0:找不到方法:void .ResourceLoadingQuery.set_Instance(object)

    SOLUTION 解决方案在这里 https github com xamarin Xamarin Forms issues 6787 或者只需确保解决方案中使用 Xamarin Forms 的所有项目均已更新 原始问题 从 4 0 0 4
  • Python functools.lru_cache 驱逐回调或等效函数

    是否可以定义回调functools lru cache当一个项目被驱逐时 在回调中还应该存在缓存的值 如果没有 也许有人知道一个支持驱逐和回调的轻量级类似字典的缓存 我将我使用的解决方案发布出来以供将来参考 我使用了一个名为cachetoo
  • 我可以将多行文本的每一行换行到一个跨度中吗?

    我一直在试图弄清楚如何做到这一点 如果可能的话 并且画了一个空白 我有一些文本将换行为多行 我想检测每一行 并将其包装在一个跨度中 最后 我想为循环数组中的每个范围分配一个类 例如 div I have some text that wra
  • jquery 上有循环 next() 吗?

    这是我的代码 div class container div class prova 1 div div class prova 2 div div class prova 3 div div 我想每 500 毫秒获取每个 div 的内容
  • angular2 @input - 更改检测[重复]

    这个问题在这里已经有答案了 有没有办法监听 Input 的变化 在下面的示例中 每当 inputData 值更改时我希望收到通知 Input inputData InputData 是的 你可以使用OnChanges生命周期事件 Input
  • 自定义按钮上的自定义属性不显示

    我扩展了 Button 小部件 使其能够应用多个自定义属性 其中一个属性是颜色滤镜 我在创建按钮时尝试将其应用于其背景 这是行不通的 请参阅下面的屏幕截图和代码 我尝试在同一代码位置直接设置背景颜色 它确实改变了背景颜色 但这不是我需要的
  • 将多个 DbContext 与通用存储库和工作单元结合使用

    我的应用程序变得越来越大 到目前为止我只有一个MyDbContext其中包含我的应用程序中所需的所有表格 我希望 为了概述 将它们分成多个DbContext like MainDbContext EstateModuleDbContext
  • gruntjs 加载外部配置

    嘿 咕噜大师们 我想将外部配置文件加载到 grunt 中 以便我可以执行以下操作 grunt dev homepage 它会加载homepage config json 然后运行watch grunt dev contact 它会加载con
  • Python 中 doxygen 风格文档字符串的 Vim 语法高亮显示

    我开始与doxygen生成我的 Python 代码的文档 我用doxypy过滤器来预处理 Python 文档字符串 我的目标是在 Python 中对 doxygen 注释进行良好的语法突出显示 当写我的mainpage在专用的 dox 文件
  • RewriteMap 激活

    如何在apache中激活RewriteMap 当我重新启动 apache 时 我尝试在 httpd 配置中运行 rewritemap 它说 此处不允许 RewriteMap 我尝试用谷歌搜索并访问apache 但找不到激活它的方法 有人知道
  • Bash 读取命令在循环外不起作用

    我一定错过了一些关于 Bash read 命令的非常基本的东西 在 shell 提示符下 无法将三个输入字段分配给相应的变量 echo a b c read x1 x2 x3 echo x1 x2 x3 这虽然有效 echo a b c w
  • Objective C sqlite3问题

    我发现在 iPhone 应用程序中更新 插入表格时遇到问题 因为我有一个文本列 当该文本包含 符号时 事情就会变得混乱 处理这个问题的最佳方法是什么 在使用带有撇号的字符串之前我应该 检查吗 有没有一种快速添加格式的方法 可以在每个撇号前面
  • actionPerformed 中的线程睡眠

    我正在尝试制作一个有 3 个按钮的小程序 所有按钮都是白色的 按下第一个按钮 带有文字 开始 将使第二个按钮变为橙色 3 秒钟 然后 在此时间之后 它将再次变为白色 而第三个按钮将永久变为绿色 然而 在我的下面的代码中 我在实现这一点时遇到
  • 将函数指针作为参数传递给 dll 函数并从 dll 内部调用它们是否安全?

    我想将一些 无论是否为 dll 函数指针作为参数传递给一些 dll 函数 并从 dll 内部调用它们 我想知道它是否安全 因为我找到了有关的信息http publib boulder ibm com infocenter zos v1r10
  • 如何在 iOS Swift 4 中检测屏幕锁定/解锁?

    如何在 iOS 中检测屏幕锁定 解锁 我正在使用 Swift 4 Xcode 9 2 并且我尝试过以下链接 但它们对我不起作用 iOS swift 3 检测到屏幕解锁失败 https stackoverflow com questions
  • C99 指定初始化程序重复索引在构建输出或 lint 中根本未标记

    前几天我玩了一下指定的初始化器 令我惊讶的是 多次使用相同的索引是有效的 更重要的是 当我这样做时 它甚至没有产生编译器警告 错误 甚至信息语句 甚至 PC Lint 似乎也不关心 我认为这最让我惊讶 我想知道在这种情况下编译器是否有原因甚
  • 对强连通图的最小添加

    我有一组节点和它们之间的一组有向边 边缘没有重量 如何找到必须添加的最小数量的边以使图强连接 即应该有一条从每个节点到所有其他节点的路径 这个问题有名字吗 这是一个非常经典的图问题 运行类似 Tarjan SCC 算法的算法来查找所有 SC
  • 两条线之间的角度错误

    我想得到两条线之间的角度 所以我使用了这段代码 int posX ScreenWidth gt gt 1 int posY ScreenHeight gt gt 1 double radians degrees radians atan2f
  • 用python计算梯度

    我想知道如何numpy gradient工作 我用梯度来尝试计算群速度 波包的群速度是频率相对于波数的导数 而不是一组速度 我向它提供了一个 3 列数组 前 2 列是 x 和 y 坐标 第三列是该点 x y 的频率 我需要计算梯度 我确实期