ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python matplotlib quiver——画箭头、风场

2019-02-19 15:49:14  阅读:1761  来源: 互联网

标签:plt quiver idx python numerical gradient 风场 np grad


理解参考:https://blog.csdn.net/liuchengzimozigreat/article/details/84566650

以下实例

 

 

import numpy as np
import matplotlib.pyplot as plt

def function(x):
    return np.sum(x**2)#return x[0]**2 + x[1]**2

def _numerical_gradient_no_batch(f,x):
    h = 1e-4
    grad = np.zeros_like(x)
    for idx in range(x.size):
        tmp_va1 = x[idx]
        x[idx] = float(tmp_va1) + h
        fxh1 =f(x)

        x[idx] = tmp_va1 -h
        fxh2 = f(x)
        grad[idx] = (fxh1- fxh2)/(2*h)

        x[idx] = tmp_va1
    print("grad:"+str(grad))
    return grad

def numerical_gradient(f,X):
    if X.ndim == 1:
        return _numerical_gradient_no_batch(f,X)
    else:
        grad = np.zeros_like(X)
        for idx,x in enumerate(X):
            grad[idx] = _numerical_gradient_no_batch(f,x)
        return grad

def function_2(x):
    if x.ndim == 1:
        return np.sum(x **2)
    else:
        return np.sum(x**2,axis=1)


def tangent_line(f,x):
    d = numerical_gradient(f,x)
    print(d)
    y = f(x) - d * x
    return lambda t : d * t + y

print(_numerical_gradient_no_batch(function_2,np.array([3.0,4.0])))
print(numerical_gradient(function_2,np.array([3.0,4.0])))
print(numerical_gradient(function_2,np.array([[3.0,4.0],[0.0,2.0],[3.0,0.0]])))
if __name__ =='__main__':
    x0= np.arange(-2,2.5,0.25)
    x1=np.arange(-2,2.5,0.25)
    X,Y= np.meshgrid(x0,x1)
    X = X.flatten()
    Y = Y.flatten()

    grad = numerical_gradient(function_2,np.array([X,Y]))

    plt.figure()
    plt.quiver(X,Y,-grad[0],-grad[1],angles="xy",color="#666666")
    plt.xlim([-2,2])
    plt.ylim([-2,2])
    plt.xlabel('x0')
    plt.ylabel('x1')
    plt.grid()
    plt.legend()
    plt.draw()
    plt.show()

 

标签:plt,quiver,idx,python,numerical,gradient,风场,np,grad
来源: https://www.cnblogs.com/xianhan/p/10401442.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有