zoukankan      html  css  js  c++  java
  • python matplotlib quiver——画箭头、风场

    理解参考: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()
  • 相关阅读:
    跨域(六)——window.name
    跨域(五)——postMessage
    跨域(四)——document.domain
    跨域(三)——JSONP
    Web安全颜色
    跨域(二)——WebSocket
    Win7下npm命令Error: ENOENT问题解决
    跨域(一)——CORS机制
    父组件传值给孙组件
    vue使用bus进行兄弟组件传值
  • 原文地址:https://www.cnblogs.com/xianhan/p/10401442.html
Copyright © 2011-2022 走看看