Numpy 练习题
1. 使用循环和向量化两种不同的方法来计算 100 以内的质数之和。
先定义个判断质数的函数。ps:纯手工打造,原生态,哈哈。
def checkprime(x):
if x<=1:
return False;
prime=True;
for i in range(2 , 1+x/2):
if x%i == 0:
prime = False;
break;
return prime;
使用循环方法来计算 100 以内的质数之和。
def sumprimebyiter(n=100):
primesum=0
for i in range(1, n+1):
if( True == checkprime(i)):
primesum += i
return primesum
%timeit sumprimebyiter(100)
10000 loops, best of 3: 138 µs per loop
使用向量化的方法来计算 100 以内的质数。ps:怎么将判断质数的函数应用到向量中的每一个元素,可是花了好几分钟来寻找,终于发现 map 可以实现这个功能。后来又发现 np.vectorize 也可以实现同样功能。
import numpy as np
def sumprimebyarr(n=100):
a = np.arange(1,n+1)
# return sum(a[np.array(map(CheckPrime, a))]) # 此处是之前用 Python 自带的 map 把函数应用到向量的每个元素
check_prime_vec = np.vectorize(CheckPrime) # 此处代码用到了 np.vectorize,可以把外置函数应用到向量的每个元素
return np.sum(a[check_prime_vec(a)])
%timeit sumprimebyarr(100)
10000 loops, best of 3: 204 µs per loop
上面两种方法都使用魔术函数 %timeit 计算了执行时间,意外的是,向量化的方法竟然没有循环快,一定是哪儿不对,待我好好检查下,再补充该题答案。
2. 模拟一个醉汉在二维空间上的随机漫步。
先试试一维空间上的随机漫步。既然本周学了 Numpy,这里就直接上 np.random 了。
%pylab inline
Populating the interactive namespace from numpy and matplotlib
nsteps = 1000
draws = np.random.randint(-1,2,size=nsteps)
walk = draws.cumsum()
plot(walk)
[<matplotlib.lines.Line2D at 0x7f52c3534250>]
再来看下二维的。
nsteps = 1000
draws = np.random.randint(-1,2,size=(2,nsteps))
walks = draws.cumsum(1)
plot(walks[0,:],walks[1,:])
[<matplotlib.lines.Line2D at 0x7f52c34cf3d0>]
先生成 1000 个随机漫步方向,方向是从 {-1, 0, 1} 中随机挑两个值(两个值也可相等)作为移动方向,所以每次移动有 3×3=9 种选择,初始位置也是 9 种选择,cumsum 函数是将每次的移动累加,最后通过 plot 画出来。
代码调通之前,我都没想到代码能这么少。Python 还是好用,这要是用 C++ 写,得多少代码啊。
3. 使用梯形法计算一个二次函数的数值积分。
梯形法计算数值积分,就是把自变量分成无数小段,每一小段的面积用一个梯形面积近似,当小段的个数无限多,小段的长度无限小时,所有的小梯形面积加起来,就近似等于该函数的数值积分。如下图所示:
原理很简单,代码也很简单:
import numpy as np
def CompIntegralbyladder(func,x0,x1):
wholearea = 0
step = 0.1
for i in np.arange(x0, x1, step):
wholearea += (func(i)+func(i+step))*step/2; # Compute the Trapezoidal area
return wholearea;
该函数可以计算任意函数的积分。函数写好了,都分隔成长度为 0.1 的小区间。先来测试下指数函数的积分。
\]
CompIntegralbyladder(np.exp,1,4)
51.923094224367127
来看下正确答案。注意指数函数的不定积分还是指数函数本身。
from sympy.interactive import printing
printing.init_printing(use_latex=True)
\]
np.exp(4)-np.exp(1)
51.879868204685188
附上指数函数的图形。
%pylab inline
Populating the interactive namespace from numpy and matplotlib
import numpy as np
x = np.linspace(-5, 5, num = 100)
y = np.exp(x)
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.show()
再看看计算个二次函数的积分。随便写个二次函数。
\]
def Quadratic(x):
return 2*x**2 + 3*x + 4
先来看看这个函数的图形。
import numpy as np
x = np.linspace(-5, 5, num = 100)
y = Quadratic(x)
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.show()
我们就计算该二次函数从 -5 到 5 的积分吧。
\]
CompIntegralbyladder(Quadratic,-5,5)
206.69999999999825
下面来计算下正确的积分值。
因为:
\]
所以:
\]
def Integral(x):
return (2*x**3)/3 + (3*x**2)/2 + 4*x
Integral(5)-Integral(-5)
207
可见,梯形法计算积分还是比较准确的。
Numpy 练习题的更多相关文章
- numpy练习题
1. 导入numpy库并简写为 np import numpy as np 2. 打印numpy的版本和配置说明 print(np.__version__) print(np.show_config( ...
- 101道Numpy、Pandas练习题
无论是数据分析还是机器学习,数据的预处理必不可少. 其中最常用.最基础的Python库非numpy和pandas莫属,很多初学者可能看了很多教程,但是很快就把用法忘光了. 光看不练假把式,今天向大家推 ...
- 快速入门Numpy
教你十分钟学会使用numpy. 简单介绍一下numpy的话,这就是一个基于多维数组的python科学计算的核心库. 基本信息 # 一般用np作为numpy的缩写 import numpy as np ...
- AI 学习路线
[导读] 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献,内容涵盖AI入门基础知识.数据分析挖掘.机器学习.深度学习.强化学习.前 ...
- [转]numpy 100道练习题
100 numpy exercise 翻译:YingJoy 网址: https://www.yingjoy.cn/ 来源:https://github.com/rougier/numpy-100 Nu ...
- PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。
Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...
- 对numpy.meshgrid()理解
一句话解释numpy.meshgrid()——生成网格点坐标矩阵.关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼?看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵, ...
- python数据分析三剑客之: Numpy
数据分析三剑客之: Numpy 一丶Numpy的使用 numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...
- NumPy 百题大冲关,冲鸭!
角色名称:NumPy 角色描述:NumPy是一个NASA都在用的扩展库. NumPy提供了许多高级的数值编程技能,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而战斗.是很多大型 ...
随机推荐
- spring 配置中相关属性的含义:
1:parent元素属性 一个bean定义可能会包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法等等)以及构造函数参数和属性的值.一个child bean定义是一个能够从paren ...
- loadrunner多场景的串行执行以及定时执行
方法一: 既然是脚本串行执行,那在场景设计中必然是要用多个脚本,要注意的是需要将Scenario Schedule中的Schedule by设置为Group的模式.然后按实际需要依次设置每个脚本的Sc ...
- C#知识
2018年10月29日 1.类可以定义的位置: (1)单独定义一个class,在program类的同一个文件内 (2)单独定义一个class,在program类的不同一个文件内 (3)类内定义clas ...
- UESTC 485 Game(康托展开,bfs打表)
Game Time Limit: 4000/2000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status t ...
- opencv学习笔记——颜色空间转换函数cv::cvtColor详解
cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致. 具体 ...
- flask中Flask()和Blueprint() flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
1.Blueprint()在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称.当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参 ...
- nginx:负载均衡的session共享
一.场景 当nginx做了负载均衡之后,同一个ip的url请求服务器的时候,负载均衡会根据每台服务器的权重等一些设置将请求转发到不同的服务器上去进行处理,这样的话针对一些带有状态请求的情况来说就是个很 ...
- java 入门基础学习
问题一:java编写的源代码为什么能在windows/linux/macOS操作系统运行?运行原理是什么?为什么说它是跨平台的? 从jdk/jvm/jre说起 1.JDK简介 https://blog ...
- 优云老王的心路历程(二):下一站Web体验监控产品
在上一篇文章中,和大家聊到了建立Web应用体验监控体系,经过了概念阶段,也完成了技术选型,就进入了把实质性的产品研发阶段.作为产品经理,时刻不敢忘记我们的产品目标:无限感知你的用户,建立完备的体验监控 ...
- 10.numpy基本用法
参考: https://blog.csdn.net/sinat_32547403/article/details/54017551