精华内容
下载资源
问答
  • 直接列出函数:numpy.interp(x, xp, fp, left=None, right=None, period=None)x - 表示将要计算插值点x坐标xp - 表示已有的xp数组fp - 表示对应于已有的xp数组的值left - 表示当x值在xp中最小值左边时,x对应y的值...

    直接列出函数:

    numpy.interp(x, xp, fp, left=None, right=None, period=None)

    x - 表示将要计算的插值点x坐标

    xp - 表示已有的xp数组

    fp - 表示对应于已有的xp数组的值

    left - 表示当x值在xp中最小值左边时,x对应y的值为left

    right - 表示当x值在xp中最大值右边时,x对应y的值为right

    (left和right表示x在xp的域外时,y的取值)

    example:

    1.

    import numpy as np

    xp = [1, 2, 3]

    fp = [3, 2, 0]

    print(np.interp(2.5, xp, fp))

    output:1.0

    2.

    import numpy as np

    xp = [1, 2, 3]

    fp = [3, 2, 0]

    x = [0, 1, 1.5, 2.72, 3.14]

    print(np.interp(x, xp, fp))

    output:[3. 3. 2.5 0.56 0. ]

    3.

    import numpy as np

    xp = [1, 2, 3]

    fp = [3, 2, 0]

    x = [0, 1, 1.5, 2.72, 3.14]

    print(np.interp(x, xp, fp, -99, 99))

    output:[-99. 3. 2.5 0.56 99. ]

    补充知识:numpy 的一维插值函数interp

    numpy.interp(x, xp, fp, left=None, right=None, period=None)

    返回离散数据的一维分段线性插值结果,浮点数或复数(对应于fp值)或ndarray. 插入数据的纵坐标,和x形状相同。

    x: 数组,待插入数据的横坐标.

    xp: 一维浮点数序列,原始数据点的横坐标,如果period参数没有指定那么就必须是递增的。否则,在使用xp = xp % period正则化之后,xp在内部进行排序.

    fp: 一维浮点数或复数序列原始数据点的纵坐标,和xp序列等长.

    left: 可选参数,类型为浮点数或复数(对应于fp值),当x < xp[0]时的插值返回值,默认为fp[0].

    right: 可选参数,类型为浮点数或复数(对应于fp值),当x > xp[-1]时的插值返回值,默认为fp[-1].

    period: None或者浮点数,可选参数. 横坐标的周期. 此参数使得可以正确插入angular x-coordinates. 如果该参数被设定,那么忽略left参数和right参数。

    插入横坐标在原函数横坐标范围内

    x = 2.5 # 要插入值的横坐标

    xp = [1, 2, 3] # 要插入序列的横坐标

    fp = [3, 2, 0] # 要插入序列的纵坐标

    y = np.interp(x, xp, fp) # 返回插入值的纵坐标 1.0

    plt.plot(xp, fp, '-o')

    plt.plot(x, y, 'x')

    plt.show()

    插入横坐标在原函数横坐标外(默认)

    x = [0, 1, 1.5, 2.72, 3.14] # 左侧外部默认为原函数最左侧函数值,右侧默认为右侧

    xp = [1, 2, 3]

    fp = [3, 2, 0]

    y = np.interp(x, xp, fp) # array([ 3. ,3. ,2.5 ,0.56, 0. ])

    plt.plot(xp, fp, '-o')

    plt.plot(x, y, 'x')

    plt.show()

    插入横坐标在原函数横坐标外(指定)

    x = 3.14

    xp = [1, 2, 3]

    fp = [3, 2, 0]

    UNDEF = -99.0

    y = np.interp(x, xp, fp, right=UNDEF) # -99.0

    plt.plot(xp, fp, '-o')

    plt.plot(x, y, 'x')

    plt.show()

    正弦插值

    x = np.linspace(0, 2 * np.pi, 10) # 在0到2pi的范围内均匀取10个点

    y = np.sin(x) # sin函数x横坐标对应的y值

    xvals = np.linspace(0, 2 * np.pi, 50) # 均匀取50个

    yinterp = np.interp(xvals, x, y) # 在映射关系为y的x中插入xvals

    plt.plot(x, y, 'o')

    plt.plot(xvals, yinterp, '-x')

    plt.show()

    以上这篇Numpy一维线性插值函数的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持python博客。

    展开全文
  • 尽管 numpy 自身提供了 numpy.interp 插值函数,但只能做一维线性插值,因此,在实际工作中,我们更多地使用 scipy 的 interpolate 子模块。关于 numpy 和 scipy 的关系,有兴趣的话,可以参考拙作《数学建模三剑客...

    在科学计算和数据处理领域,数据插值是我们经常面对的问题。尽管 numpy 自身提供了 numpy.interp 插值函数,但只能做一维线性插值,因此,在实际工作中,我们更多地使用 scipy 的 interpolate 子模块。关于 numpy 和 scipy 的关系,有兴趣的话,可以参考拙作《数学建模三剑客MSN》

    遗憾的是,scipy.interpolate 只提供了一维和二维的插值算法,而大名鼎鼎的商业软件 Matlab 则有三维插值函数可用。事实上,三维乃至更高阶的插值需求还是挺普遍的。比如,三维体数据绘制时,为了增强显示效果,让数据体看起来更细腻,三维插值是必不可少的。下图是三维数据插值前后的3D显示效果对比(使用 pyopengl 绘制)。
    在这里插入图片描述三维乃至更高阶的数据插值,简称高阶快插,通常都是线性插值。最自然的想法,是循环调用 scipy.interpolate 的 interp1d 或 interp2d 函数实现三维插值,但是循环调用的效率低得无法忍受,完全体现不出 numpy 的广播和矢量化的特点。

    网上有人提出在_fitpack模块中使用_spline属性和低级别的_bspleval()函数,以实现高阶快插。详情见《python – 3D阵列上的快速插值》。文中的代码我费了九牛二虎之力仍然没有跑通。

    那么,能否借助 numpy 的广播和矢量化的特点,实现高阶快插呢?经过验证,这个思路是完全可行的。我们先从一维线型插值开始讨论。

    1. 使用元素重复函数 repeat() 将长度为 n 的一维数组扩展成长度为 2n-1 的数组,排在偶数位置的元素是前面元素的重复;
    2. 所有偶数位置的元素减去前后元素差的一半。

    我们来验证一下:

    import numpy as np
    >>> a = np.arange(5, dtype=np.float)
    >>> a
    array([0., 1., 2., 3., 4.])
    >>> a = a.repeat(2)[:-1]
    >>> a
    array([0., 0., 1., 1., 2., 2., 3., 3., 4.])
    >>> a[1::2] += (a[2::2]-a[1::2])/2
    >>> a
    array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ])
    

    结果符合预期,完全矢量化!进一步验证,还可以证明该方法对 numpy.nan 类型的数据处理方式符合我们的期望。

    >>> a = np.arange(5, dtype=np.float)
    >>> a[2] = np.nan
    >>> a
    array([ 0.,  1., nan,  3.,  4.])
    >>> a = a.repeat(2)[:-1]
    >>> a
    array([ 0.,  0.,  1.,  1., nan, nan,  3.,  3.,  4.])
    >>> a[1::2] += (a[2::2]-a[1::2])/2
    >>> a
    array([0. , 0.5, 1. , nan, nan, nan, 3. , 3.5, 4. ])
    

    接下来,我们就可以尝试用这个思路实现三维数组的线性插值了。代码如下:

    import numpy as np
    
    def interp3d(arr_3d):
        """三维数组线性插值
        
        arr_3d      - numpyp.ndarray类型的三维数组
        """
        
        layers, rows, cols = arr_3d.shape
        
        arr_3d = arr_3d.repeat(2).reshape((layers*rows, -1))
        arr_3d = arr_3d.repeat(2, axis=0).reshape((layers, -1))
        arr_3d = arr_3d.repeat(2, axis=0).reshape((layers*2, rows*2, cols*2))[:-1, :-1, :-1]
        
        
        arr_3d[:,:,1::2] += (arr_3d[:,:,2::2]-arr_3d[:,:,1::2])/2
        arr_3d[:,1::2,:] += (arr_3d[:,2::2,:]-arr_3d[:,1::2,:])/2
        arr_3d[1::2,:,:] += (arr_3d[2::2,:,:]-arr_3d[1::2,:,:])/2
        
        return arr_3d
    
    if __name__ == '__main__':
        import time
        
        arr_3d = np.random.randn(100, 200, 300)
        print(u'插值前数组的shape:', arr_3d.shape)
        
        t0 = time.time()
        arr_3d = interp3d(arr_3d)
        t1 = time.time()
        
        print(u'插值后数组的shape:', arr_3d.shape)
        print(u'耗时%.03f秒'%(t1-t0,))
    

    运行结果如下:

    PS D:\XufiveGit\interp3d> py -3 .\test.py
    插值前数组的shape: (100, 200, 300)
    插值后数组的shape: (199, 399, 599)
    耗时1.281秒
    

    在我的认知范围内,这应该是目前最快的高阶快插算法了。虽殚精竭虑而后得,亦弗敢专也,必以分享于同好。

    展开全文
  • x – 表示将要计算插值点x坐标 xp – 表示已有的xp数组 fp – 表示对应于已有的xp数组的值 left – 表示当x值在xp中最小值左边时,x对应y的值为left right – 表示当x值在xp中最大值右边时,x对应y的值为right ...
  • Numpy(一维线性插值函数)

    千次阅读 2019-10-08 00:15:31
    x - 表示将要计算插值点x坐标 xp - 表示已有的xp数组 fp - 表示对应于已有的xp数组的值 left - 表示当x值在xp中最小值左边时,x对应y的值为left right -表示当x值在xp中最大值右边时,x对应y的值为ri...

    直接列出函数:

    numpy.interp(x, xp, fp, left=None, right=None, period=None)

    x - 表示将要计算的插值点x坐标

    xp - 表示已有的xp数组

    fp - 表示对应于已有的xp数组的值

    left - 表示当x值在xp中最小值左边时,x对应y的值为left

    right - 表示当x值在xp中最大值右边时,x对应y的值为right

    (left和right表示x在xp的域外时,y的取值)

     

    example:

    1.

    1 import numpy as np
    2 
    3 xp = [1, 2, 3]
    4 fp = [3, 2, 0]
    5 
    6 print(np.interp(2.5, xp, fp))

    output:1.0

    2.

    1 import numpy as np
    2 
    3 xp = [1, 2, 3]
    4 fp = [3, 2, 0]
    5 
    6 x = [0, 1, 1.5, 2.72, 3.14]
    7 
    8 print(np.interp(x, xp, fp))

    output:[3. 3. 2.5 0.56 0. ]

    3.

    1 import numpy as np
    2 
    3 xp = [1, 2, 3]
    4 fp = [3, 2, 0]
    5 
    6 x = [0, 1, 1.5, 2.72, 3.14]
    7 
    8 print(np.interp(x, xp, fp, -99, 99))

    output:[-99. 3. 2.5 0.56 99. ]

    转载于:https://www.cnblogs.com/aperolchen/p/9471780.html

    展开全文
  • NumPy(Numerical Python)是 Python 语言的个扩展程序库。其中提供了许多向量和矩阵...拥有个类似于列表的、强大的N维数组对象ndarray,它描述了相同类型的元素的集合。具有实用的线性代数、傅里叶变换和随机生成

    NumPy(Numerical Python)是 Python 语言的一个扩展程序库。其中提供了许多向量和矩阵操作,能让用户轻松完成最优化、线性代数、积分、插值、特殊函数、傅里叶变换、信号处理和图像处理、常微分方程求解以及其他科学与工程中常用的计算,不仅方便易用而且效率更高。
    NumPy 是一个开源的Python科学计算基础库,是SciPy、Pandas等数据处理或科学计算库的基础。拥有一个类似于列表的、强大的N维数组对象ndarray,它描述了相同类型的元素的集合。具有实用的线性代数、傅里叶变换和随机生成函数的功能。可以直接完成数组和矩阵运算,无需循环。

    1.创建一个数组,数组的shape为(5,2),元素均为0。

    import numpy
    data=[[0,0],[0,0],[0,0],[0,0],[0,0]]
    print(numpy.array(data))
    

    2.创建一个表示国际象棋棋盘的8*8数组。其中,棋盘白格用0填充,棋盘黑格用1填充。

    import matplotlib.pyplot as plt
    import numpy as np
    
    b1 = np.array([[(1),(0),(1),(0)]])#构建第一行的一半
    b2 = np.array([[(0),(1),(0),(1)]])#构建第二行的一半
    b3=np.vstack((b1,b2))#组合成可循环利用的部分
    b4=np.vstack((b3,b3))#构造出棋盘的1/4
    b5=np.hstack((b4,b4))#构造出棋盘的1/2
    b6=np.vstack((b5,b5))#构造出完整的棋盘
    plt.imshow(b6)
    plt.show()
    

    3.阅读下面文字和程序,理解numpy在线性代数运算中的运用。

    numpy.linalg.solve() 函数给出了矩阵形式的线性方程的解。
    numpy.linalg.inv() 函数计算矩阵的乘法逆矩阵。
    逆矩阵(inverse matrix):设A是数域上的一个n阶矩阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。
    考虑以下线性方程:
    x + y + z = 6

    2y + 5z = -4

    2x + 5y - z = 27
    可以使用矩阵表示为:

    如果矩阵称为A、X和B,方程变为:
    AX = B

    X = A^(-1)B

    import numpy as np 
     
    a = np.array([[1,1,1],[0,2,5],[2,5,-1]]) 
     
    print ('数组 a:')
    print (a)
    ainv = np.linalg.inv(a) 
     
    print ('a 的逆:')
    print (ainv)
     
    print ('矩阵 b:')
    b = np.array([[6],[-4],[27]]) 
    print (b)
     
    print ('计算:A^(-1)B:')
    x = np.linalg.solve(a,b) 
    print (x)
    

    这就是线性方向 x = 5, y = 3, z = -2 的解

    import numpy as np
    
    a = np.array([[1, 1, 1], [0, 2, 5], [2, 5, -1]])
    
    print('数组 a:')
    print(a)
    ainv = np.linalg.inv(a)
    
    print('a 的逆:')
    print(ainv)
    
    print('矩阵 b:')
    b = np.array([[6], [-4], [27]])
    print(b)
    
    print('计算:A^(-1)B:')
    x = np.linalg.solve(a, b)
    print(x)
    

    请安装numpy包,并创建数组

    pycharm导入第三方库numpy

    import numpy
    

    numpy对象常用属性

    #numpy对象常用属性
    
    import numpy as np
    a=np.array([[1,2,3],[4,5,6]])
    print('a.ndim=',a.ndim)
    print(a)
    print(a.dtype)
    print(a.size)
    b=a.reshape(3,2)
    print(b.ndim)
    print(b)
    print(b.shape)
    print(b.itemsize)
    

    创建ndarry对象

    #创建ndarry对象
    
    import numpy as np
    a=np.array([1,2,3])
    print(a)
    b=np.array([[1,2],[3,4]])
    print(b)
    c=np.array([1,2,3,4,5],ndmin=2)
    print(c)
    d=np.array([1,2,3],dtype=complex)
    print(d)
    

    创建nmupy对象

    #创建nmupy对象
    
    import numpy as np
    x=np.zeros(5)
    print(x)
    y=np.zeros((5,),dtype=np.int)
    print(y)
    print()
    z=np.zeros((2,2),dtype=[('x','i4'),('y','i4')])
    print(z)
    

    从已有的数组来创建numpy数组

    #从已有的数组来创建numpy数组

    import numpy as np
    x=[1,2,3]
    a=np.asarray(x)
    print(a)
    print()
    y=[(1,2,3),(4,5)]
    b=np.asarray(y)
    print(b)
    

    从数值范围创建numpy数组

    #从数值范围创建numpy数组

    import numpy as np
    x=np.arange(10,21,2)
    print(x)
    
    y=np.linspace(10,20,5,endpoint=False)
    print(y)
    
    z=np.logspace(0,9,10,base=2)
    print(z)
    

    数组的运算

    #数组的运算

    import numpy as np
    a=np.array([1,2,3])
    b=np.array([3,4,5])
    print(a+b)
    print(a/b)
    print()
    
    c=np.array([[0],[1],[2],[3]])
    d=np.array([1,2,3])
    print(c)
    print()
    print(d)
    print()
    print(c+d)
    
    print(c*2)
    
    展开全文
  • 数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。 、OpenCV框架与...
  • 牛顿插值C++实现

    千次阅读 2018-07-14 22:08:24
    输出:预测点的近似函数值算法思想定义个二维数组,按照差商表顺序,从上到下、从左到右依次来更新二维数组即可。注意:举例如计算f(x0,,x1,x2) = (f(x1,x2) - f(x0,x1))/(x2 - x0) 计算f(x0,x1,x2,x3) = [f(x1,...
  • 基于GPU的三体素化

    2020-03-23 18:01:44
    根据这个顶点坐标标记三空间数组(这个三空间数组就是根据体素划分的空间序列)的相应位置,最后在CPU端读出这个三空间数组,若当前的数组位置有标记,则将该数组位置对应的立方体作为个体素...
  • 关于导弹模型建立

    千次阅读 2017-05-16 17:10:04
    1.龙格库塔法 1)建立old_y数组储存最开始的。 2)不考虑t,直接加步长后进行右函数迭代计算。 3)设定下有多少需要积分...2)2维中的某一维找到位置,进行插值计算,再调用一维插值。 3)三维找位置计算,调2维。
  • numpy:科学计算包,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成,并可与C++/Fortran语言无缝结合。树莓派Python v3默认安装已经包含了numpy。 另:scipy:...
  • 该算法首先应用几何方法将三角形表面模型重新构造成规定大小的分类体数据,同时由该表面模型建立平衡八叉树,计算用以控制网格尺寸的三维数组;然后将体数据转换成邻域内不同等值面的形态一致的边界指示数组;结合...
  • 、NumPy库简介 NumPy(Numerical Python)是 Python 语言的个扩展程序库。其中提供了许多向量和矩阵操作,能让用户轻松...拥有个类似于列表的、强大的N维数组对象ndarray,它描述了相同类型的元素的集合。并且它还
  • //建立二维数组 ifstream infile("input.txt", ios::in); //打开已存在的输入文件input.txt if (!infile) { cout 输入文件input.txt不存在\n"; exit(0); } ofstream outfile; //创建输出文件,若存在则...
  • 场景的定义在三维空间中是连续的,而最终显示的像素则是个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有个非常重要的阶段,就是光栅化,光栅化主要的作用是...
  • Python 科学计算

    2018-09-20 16:59:31
    3.3.3 二维插值.....................................91 3.4 数值积分——integrate .................. 93 3.4.1 球的体积.....................................93 3.4.2 解常微分方程组...........................
  • 包括:个强大的N维数组对象Array;比较成熟的(广播)函数库;用于整合C/C++和Fortran代码的工具包;实用的线性代数、傅里叶变换和随机数生成函数。SciPy是个开源的Python算法库和数学工具包,SciPy包含的模块有...
  • 精通matlab6.5

    2010-04-07 10:27:34
    2.2 一维数组的创建和寻访 2.3 二维数组的创建 2.4 二维数组元素的标识 2.5 二维数组的子数组寻访和赋值 2.6 执行数组运算的常用函数 2.7 数组运算的矩阵运算 2.8 多项式的表达方式及其操作 2.9 标准数组生成函数...
  • Numpy.interp

    2018-12-14 15:46:52
    Numpy一维线性插值函数 直接列出函数: numpy.interp(x, xp, fp, left=None, right=None, period=None) x - 表示将要计算插值点x坐标 xp - 表示已有的xp数组 fp - 表示对应于已有的xp数组的值 left -...
  • C#科学计算讲义[光盘源码]

    热门讨论 2013-10-22 16:15:41
    9.1 一维搜索之黄金分割法 305 9.1.1 基本原理 305 9.1.2 实验内容与数据 306 9.1.3 程序源代码 306 9.1.4 实验结论 310 9.2 连续抛物线插值法 311 9.2.1 基本原理 311 9.2.2 实验内容与数据 312 ...
  • 2.2 一维数组的创建和寻访 2.3 二维数组的创建 2.4 二维数组元素的标识 2.5 二维数组的子数组寻访和赋值 2.6 执行数组运算的常用函数 2.7 数组运算的矩阵运算 2.8 多项式的表达方式及其操作 2.9 标准数组生成...
  • 1.1.1 一维数组的倒置 2 范例1-1 一维数组的倒置 2 ∷相关函数:fun函数 1.1.2 一维数组应用 3 范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 ...
  • Labview 虚拟仪器编程实例

    热门讨论 2009-08-14 09:24:52
    .vi 2-36:簇函数举例.vi 2-37:解线性方程AX=Y.vi 2-38:一维数组产生和操作.vi 2-39:数组的插入和删除.vi 2-40:获得波形数据元素.vi 2-41:对波形数据的操作.vi 2-42:画圆.vi 2-43:三维立体图.vi 2-44:字符串...
  • 6.2.1 一维插值 6.2.2 二维插值 6.3 函数的极限 6.3.1 极限的概念 6.3.2 求极限的函数 6.4 函数数值积分 6.4.1 数值积分问题的数学表述 6.4.2 一元函数的数值积分 6.4.3 多重数值积分 6.5 本章小结...
  • 用算法程序集(C语言描述)(第五版)+源代码 第1章 多项式的计算 1.1 一维多项式求值 1.2 一维多项式多组求值 1.3 二维多项式求值 1.4 复系数多项式求值 1.5 多项式相乘 1.6 复系数多项式相乘 1.7 多项式相除 1.8 ...
  • 9.11 计算一维积分的蒙特卡洛法 9.12 变步长辛卜生二重积分方法 9.13 计算多重积分的高斯方法 9.14 计算二重积分的连分方式 9.15 计算多重积分的蒙特卡洛法 第10章 常微分方程组的求解 10.1 全区间积分的定步长欧拉...
  • 9.11 计算一维积分的蒙特卡洛法 9.12 变步长辛卜生二重积分方法 9.13 计算多重积分的高斯方法 9.14 计算二重积分的连分方式 9.15 计算多重积分的蒙特卡洛法 第10章 常微分方程组的求解 10.1 全区间积分的定步长欧拉...
  • 1.5.1字符串变量与一维字符数组 1.5.2对字符串的多项操作 1.5.3二维字符数组 1.6符号 1.6.1符号表达式的生成 1.6.2符号矩阵 1.6.3常用符号运算 1.7关系运算和逻辑运算 1.7.1关系运算 ...
  • 9.11 计算一维积分的蒙特卡洛法 9.12 变步长辛卜生二重积分方法 9.13 计算多重积分的高斯方法 9.14 计算二重积分的连分方式 9.15 计算多重积分的蒙特卡洛法 第10章 常微分方程组的求解 10.1 全区间积分的定步长欧拉...
  • 9.11 计算一维积分的蒙特卡洛法 9.12 变步长辛卜生二重积分方法 9.13 计算多重积分的高斯方法 9.14 计算二重积分的连分方式 9.15 计算多重积分的蒙特卡洛法 第10章 常微分方程组的求解 10.1 全区间积分的定步长欧拉...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

一维数组插值计算