脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Numpy数值积分的实现

Numpy数值积分的实现

2023-03-01 13:21微小冷 Python

本文主要介绍了Numpy数值积分的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

连乘连加 元素连乘prod, nanprod;元素求和sum, nansum
累加 累加cumsum, nancumsum;累乘cumprod, nancumprod

 

求和

在Numpy中可以非常方便地进行求和或者连乘操作,对于形如 x 0 , x 1 , ⋯   , xn​的数组而言,其求和 ∑xi或者连乘 ∏xi分别通过sumprod实现。

?
1
2
3
x = np.arange(10)
print(np.sum(x))    # 返回45
print(np.prod(x))   # 返回0

这两种方法均被内置到了数组方法中,

?
1
2
3
x += 1
x.sum()     # 返回55
x.prod()    # 返回3628800

有的时候数组中可能会出现坏数据,例如

?
1
2
3
x = np.arange(10)/np.arange(10)
print(x)
# [nan  1.  1.  1.  1.  1.  1.  1.  1.  1.]

其中x[0]由于是0/0,得到的结果是nan,这种情况下如果直接用sum或者prod就会像下面这样

?
1
2
3
4
>>> x.sum()
nan
>>> x.prod()
nan

为了避免这种尴尬的现象发生,numpy中提供了nansumnanprod,可以将nan排除后再进行操作

?
1
2
3
4
>>> np.nansum(x)
9.0
>>> np.nanprod(x)
1.0

 

累加和累乘

和连加连乘相比,累加累乘的使用频次往往更高,尤其是累加,相当于离散情况下的积分,意义非常重大。

?
1
2
3
4
5
6
7
from matplotlib.pyplot as plt
xs = np.arange(100)/10
ys = np.sin(xs)
ys1 = np.cumsum(ys)/10
plt.plot(xs, ys)
plt.plot(xs, ys1)
plt.show()

效果如图所示

Numpy数值积分的实现

cumprood可以实现累乘操作,即

?
1
2
3
x = np.arange(1, 10)
print(np.cumprod(x))
# [     1      2      6     24    120    720   5040  40320 362880]

sum, prod相似,cumprodcumsum也提供了相应的nancumprod, nancumsum函数,用以处理存在nan的数组。

?
1
2
3
4
5
6
7
8
>>> x = np.arange(10)/np.arange(10)
<stdin>:1: RuntimeWarning: invalid value encountered in true_divide
>>> np.cumsum(x)
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])
>>> np.nancumsum(x)
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
>>> np.nancumprod(x)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

 

trapz

cumsum操作是比较容易理解的,可以理解为离散化的差分,比如

?
1
2
3
4
5
6
>>> x = np.arange(5)
>>> y = np.cumsum(x)
>>> print(x)
array([0, 1, 2, 3, 4])
>>> print(y)
array([ 0136, 10])

trap为梯形积分求解器,同样对于[0,1,2,3,4]这样的数组,那么稍微对高中知识有些印象,就应该知道[0,1]之间的积分是Numpy数值积分的实现,此即梯形积分

?
1
2
>>> np.trapz(x)
8.0

接下来对比一下trapzcumsum作用在 sin ⁡ x sin x sinx上的效果

?
1
2
3
4
5
6
7
8
from matplotlib.pyplot as plt
xs = np.arange(100)/10
ys = np.sin(xs)
y1 = np.cumsum(ys)/10
y2 = [np.trapz(ys[:i+1], dx=0.1) for i in range(100)]
plt.plot(xs, y1)
plt.plot(xs, y2)
plt.show()

结果如图,可见二者差别极小。

Numpy数值积分的实现

 到此这篇关于Numpy数值积分的实现的文章就介绍到这了,更多相关Numpy数值积分内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://tinycool.blog.csdn.net/article/details/128777063

延伸 · 阅读

精彩推荐
  • Pythonpython3 通过 pybind11 使用Eigen加速代码的步骤详解

    python3 通过 pybind11 使用Eigen加速代码的步骤详解

    这篇文章主要介绍了python3 通过 pybind11 使用Eigen加速代码的步骤详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    好问雷8802021-08-10
  • Python使用Python生成url短链接的方法

    使用Python生成url短链接的方法

    这篇文章主要介绍了使用Python生成url短链接的方法,短链接在如今在微博等社交网站中等是非常常见的功能,需要的朋友可以参考下 ...

    Python教程网12432020-06-21
  • PythonPython中常见的数据类型小结

    Python中常见的数据类型小结

    这篇文章主要对Python中常见的数据类型进行了总结归纳,很有参考借鉴价值,需要的朋友可以参考下...

    Python教程网5762020-07-30
  • Python为什么是 Python -m

    为什么是 Python -m

    这篇文章给大家介绍了Python -m的含义及python -m 和 python 的区别解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    BlackMonkey3312020-07-10
  • PythonPython自定义线程池实现方法分析

    Python自定义线程池实现方法分析

    这篇文章主要介绍了Python自定义线程池实现方法,结合实例形式较为详细的分析了Python自定义线程池的概念、原理、实现方法及相关注意事项,需要的朋友可...

    苍松11522021-01-12
  • Pythonpython返回昨天日期的方法

    python返回昨天日期的方法

    这篇文章主要介绍了python返回昨天日期的方法,涉及Python日期操作的相关技巧,需要的朋友可以参考下...

    ishare3792020-06-27
  • PythonPython中三种花式打印的示例详解

    Python中三种花式打印的示例详解

    在Python中有很多好玩的花式打印,我们今天就来挑战下面三个常见的花式打印。文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起学习一下吧...

    赵卓不凡7332022-11-10
  • Pythonpython装饰器代码解析

    python装饰器代码解析

    这篇文章主要介绍了python装饰器代码解析,文章分享的内容有装饰器通用模型及一些关键点,通过举例详细介绍,具有一的参考价值,需要的朋友可以参考...

    低调说7852022-11-12