Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用python计算梯度

用python计算梯度
EN

Stack Overflow用户
提问于 2013-07-27 10:59:41
回答 1查看 34.1K关注 0票数 10

我想知道numpy.gradient是如何工作的。我用梯度法来计算群速度(波包的群速度是相对于波包的频率的导数,而不是一组速度)。我给它提供了一个3列数组,前2列是x和y共弦,第三列是那个点的频率(x,y)。我需要计算梯度,我确实期望有一个2d向量,就是梯度定义。

代码语言:javascript
运行
AI代码解释
复制
df/dx*i+df/dy*j+df/dz*k 

我的函数只是x和y的函数,我期望

代码语言:javascript
运行
AI代码解释
复制
df/dx*i+df/dy*j 

但是我得到了两个数组,每个列有3列,也就是两个三维向量;起初,我认为两者之和会给出我搜索的向量,但z分量没有消失。我希望我的解释已经足够清楚了。我想知道numpy.gradient是如何工作的,它是否适合我的问题。否则,我想知道是否还有其他的python函数可以使用。

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

代码语言:javascript
运行
AI代码解释
复制
data=[[x1,x2,x3]...[x1,x2,x3]]

其中,x1,x2是统一网格上的点坐标(我在brillouin区域上的点),x3是该点的频率值。我在输入中也给出了两个方向的推导步骤:

代码语言:javascript
运行
AI代码解释
复制
stepx=abs(max(unique(data[:,0])-min(unique(data[:,0]))/(len(unique(data[:,0]))-1)

方向也是一样。我没有在网格上构建我的数据,我已经有了一个网格,这就是为什么这里给出的好例子对我没有帮助。一个更合适的例子应该有一个点和值的网格,就像我拥有的那样:

代码语言:javascript
运行
AI代码解释
复制
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)

我可以补充的另一件事是,我的网格不是正方形的,而是一个多边形的形状,是2d晶体的布里渊区。

我已经理解,numpy.gradient只在值的正方形网格上正确工作,而不是我搜索的内容。即使我把我的数据作为一个网格,在原始数据的多边形之外有大量的零,这也会给我的梯度增加很高的向量,对计算的精度产生负面影响。在我看来,这个模块更像是一个玩具,而不是一个工具,它有严重的局限性。

用字典解决问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-27 13:04:27

您需要给gradient一个矩阵来描述您的(x,y)点的角频率值。例如:

代码语言:javascript
运行
AI代码解释
复制
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是dz/dx at (x0,y0)。可视化gx有助于理解:

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

这里有一个更明显的使用f(x,y) = sin(x)的例子..。

f(x,y)

与梯度

更新让我们来看看xy对。

这是我使用的代码:

代码语言:javascript
运行
AI代码解释
复制
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]值相关的点是什么?然后..。

代码语言:javascript
运行
AI代码解释
复制
>>> Z[20][30]
-0.99749498660405478

重点是

代码语言:javascript
运行
AI代码解释
复制
>>> xy_pairs[20][30]
'-1.5,-2.0'

是那么回事吗?让我们来检查一下。

代码语言:javascript
运行
AI代码解释
复制
>>> np.sin(-1.5)
-0.99749498660405445

是。

在这一点上,我们的梯度成分是什么?

代码语言:javascript
运行
AI代码解释
复制
>>> gy[20][30]
0.0
>>> gx[20][30]
0.070707731517679617

那些退房了吗?

dz/dy always 0检查。dz/dx = cos(x)和..。

代码语言:javascript
运行
AI代码解释
复制
>>> np.cos(-1.5)
0.070737201667702906

看起来不错。

您会注意到它们是不完全正确的,这是因为我的Z数据不是连续的,有一个步骤大小的0.05gradient只能接近变化的速度。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17901363

复制
相关文章
7-15 球队“食物链” (30 分)【 DFS + 剪枝】
某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。
Lokinli
2023/03/09
3350
足球数据 | 被对手进球后的十分钟内最有可能扳回比分
大数据文摘作品 转载具体要求见文末 作者|Alex Bleakley 选文 | Aileen 翻译 | 徐宇文 校对 | 王昱森 摘要:在凌晨结束的世预赛亚洲区12强赛第4场比赛中,中国队客场0比2不敌乌兹别克斯坦,4战之后仅积1分。赛后,国足主帅高洪波在发布会上宣布辞职。 有人说,当一支足球队刚进球了以后,他们会突然变得比之前更容易被对方进球,这种说法是可靠的吗?这一现象又与主客场、球队实力等因素有无关系? 来自英国的作者Alex Bleakley通过数据分析,针对这一现象进行了研究:他分析了201
大数据文摘
2018/05/22
1.4K0
《世界杯彩票竞猜系统》设计报告
足球彩票节是由爱彩网在2014年巴西世界杯前夕发起的彩民网上盛筵,从2014年6月3日开幕,至世界杯结束闭幕,此节日长达41天。节日期间爱彩网不间断推出众多促销活动惠及球迷和彩民,同时为世界杯助力造势。因此,建立一套基于计算机环境的技术先进、高效稳定、安全可靠的世界杯彩票竞猜测评系统是完全有必要的。
小爷毛毛_卓寿杰
2019/02/13
1K0
《世界杯彩票竞猜系统》设计报告
Python算法——树的平衡检测
树的平衡检测是指判断一棵树是否为平衡二叉树,即每个节点的左右子树高度差不超过1。在本文中,我们将深入讨论如何实现树的平衡检测算法,提供Python代码实现,并详细说明算法的原理和步骤。
Echo_Wish
2023/11/30
1580
常用进程调度算法_进程调度算法例题
所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。通常有以下两种进程调度方式:
全栈程序员站长
2022/11/10
1.4K0
常用进程调度算法_进程调度算法例题
进程调度算法设计_三种调度算法
进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。
全栈程序员站长
2022/11/09
1.2K0
进程调度算法设计_三种调度算法
io调度算法
Linux 内核包含4个IO调度器,分别是 Noop IO scheduler、Anticipatory IO scheduler、Deadline IO scheduler 与 CFQ IO scheduler。
233333
2022/05/10
1.2K0
io调度算法
磁盘调度算法
平均寻道长度是磁盘调度算法的性能指标之一,用于评估磁头在访问磁盘上的数据时的平均移动距离。
一个风轻云淡
2023/10/15
8040
磁盘调度算法
进程的调度常用算法
系统将按照作业到达的先后次序来进行作业调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中优先选择几个最先进入该队列的作业,将他们调入内存,为他们分配资源和创建进程。然后把它放入就绪队列。当在进程调度中采用FCFS算法时,每次调度是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而组赛后,进程调度程序才将处理机分配给其他进程。 在进程调度中采用先来先服务算法的时候,每次调度就从就绪队列中选一个最先进入该队列的进程,为之分配处理机,即谁第一排队谁就先被执行。
一个风轻云淡
2023/10/15
3130
进程的调度常用算法
通过sql语句分析足彩(第三篇)(r3笔记第91天)
在之前写过两片关于sql语句分析足彩的。都从不同的角度提供了一些思路,之前是基于500场比赛的数据分析,为了数据分析的更加有说服性,我抽取了7000多场比赛的数据来作为分析的基础。 自己是在世界杯的时
jeanron100
2018/03/15
6810
进程调度算法;先来先服务调度算法、短作业优先调度算法、时间片轮转调度算法「建议收藏」
2. 掌握进程调度算法,如先来先服务调度算法(first come first served,FCFS)、短作业优先调度算法(shotjob first,SJF)、时间片轮转调度算法。
全栈程序员站长
2022/11/11
2.5K0
进程调度算法;先来先服务调度算法、短作业优先调度算法、时间片轮转调度算法「建议收藏」
进程调度算法
在多道程序系统中,进程的数量往往多于处理机的个数,因此进程争用处理机的情况在所难免。处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效)选择一个进程并将处理机分配给它运行,以实现进程并发执行。
薄荷冰
2024/11/14
2070
进程调度算法
进程调度算法
1. 先来先服务调度算法。先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度, 也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业, 而不利于I/O繁忙型的作业(进程)。
黄规速
2022/04/14
1.1K0
调度算法的评价指标
文章目录 知识总览 1. CPU利用率 2. 系统吞吐量 3. 周转时间 4. 等待时间 5. 响应时间 知识回顾与重要考点 知识总览 1. CPU利用率 2. 系统吞吐量 3. 周转时间 4. 等待
兮动人
2021/06/11
6130
调度算法的评价指标
常用的进程调度算法
进程调度是由操作系统的进程调度程序按照某种策略和算法从就绪态进程中为当前空闲的CPU选择要运⾏的新进程,常用的进程调度算法有以下几种:
越陌度阡
2020/11/26
2.5K0
常用的进程调度算法
进程调度算法
**高响应比优先算法规则**:在每次调度时先计算各个作业/进程的*相应比*,选择*相应比最高的*作业/进程为其服务
用户3906509
2020/06/12
2K0
作业调度算法
  在多道程序环境中,主存中有着多个进程,其数目往往多于处理机数量。这就要求系统能按照某种算法动态地把处理机分配给就绪队列中的一个进程,使之执行,分配处理机的任务是由处理机调度程序完成的。 处理机调度   在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度(也称为高级调度)和进程调度(也称为低级调度)两个过程才能获得处理机;而对于终端型作业而言,通常只需要经过进程调度就可以获得处理机。除了上述两种调度,操作系统中往往也设置了中级调度,用来提
Mister24
2018/05/14
4K0
LVS调度算法
内核中的连接调度算法 IPVS在内核中的负载均衡调度是以连接为粒度的。在HTTP协议(非持久中),每个对象从WEB服务器上获取都需要建立一个TCP连接,同一用户的不同请求会被调度到不同服务器上,所以这种细粒度的调度在一定程度上可以避免单个用户访问的突发性引起服务器间的负载不平衡。 在内核中的连接调度算法上,IPVS已实现了以下八种调度算法: 轮叫调度(Round-Robin Scheduling) 加权轮叫调度(Weighted Round-Robin Scheduling) 最小连接调度(Least-Co
用户1173509
2018/03/28
1.4K0
[操作系统]磁盘调度算法
一次磁盘读写操作所需要的时间 寻找时间(寻道时间):磁头臂前后移动寻找磁道所需的时间 (系统软件可算法优化) 延迟时间:磁头旋转定位到目标扇区所需要的时间 (固定) 传输时间:读写数据到扇区所需的时间 (固定)
唯一Chat
2021/01/05
1.3K0
[操作系统]磁盘调度算法
用python基于2015-2016年的NBA常规赛及季后赛的统计数据分析
一、实验介绍 1.1 内容简介 不知道你是否朋友圈被刷屏过nba的某场比赛进度或者结果?或者你就是一个nba狂热粉,比赛中的每个进球,抢断或是逆转压哨球都能让你热血沸腾。除去观赏精彩的比赛过程,我们也
机器学习AI算法工程
2018/03/14
2.8K1
用python基于2015-2016年的NBA常规赛及季后赛的统计数据分析

相似问题

瓷砖对匹配算法

20

匹配-三益智游戏算法

50

多层同步

10

多层平台

10

多层弹丸轨迹

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档