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提供了许多高级的数值编程技能,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而战斗.是很多大型 ...
随机推荐
- 拦截chrome的console.log输出
console.log = function(){}; 这样 console.log(123) 将不会在输出任何调试信息
- 如何设置Eclipse工作区默认编辑宽度
1)打开Window => Preferences窗口 2)打开Formatter属性页从Java => CodeStyle => Formatter 3) 单击New创建一个自己 ...
- 南京网络赛J-Sum【数论】
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- 南京网络赛E-AC Challenge【状压dp】
Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answe ...
- New动态分配 Delete 释放内存
在C++中,对于变量和对象都是编译器在编译时分配好的,对于数组初始化时,无法确定多少内存,很容意造成大开小用的情况. new 动态分配 一般格式:1. 指针变量名 =new 类型标识符; 2.指针 ...
- 百度输入法引起的Mac远程桌面Ctrl+.快捷键不起作用
被这个问题困扰已久!在Mac中通过远程桌面(Remote Desktop)连接至Windows服务器时,Ctrl+.快捷键不起作用,而这是用Visual Studio写代码时常用的快捷键(对应的命令是 ...
- Ubuntu下MySQL主从同步配置
一.在两台Linux机器上安装MySQL 二.Master主服务器配置(192.168.1.3) 1.编辑my.cnf编(命令查找文件位置:find / -name my.cnf) vi /etc/m ...
- HDU_3183_A Magic Lamp
A Magic Lamp Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV
Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV – lxw的大数据田地 http://lxw1234.com/archives/2015/09/516.htm Java使用极小 ...
- neovim 使用
neovim配置与vim兼容,配置文件在~/.config/nvim 终端 :terminal 进入shell模式 <C-\><C-n> 退出终端 <M-i> 重新 ...