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 的小区间。先来测试下指数函数的积分。

\[\int_{1}^{4} e^{x}dx
\]

CompIntegralbyladder(np.exp,1,4)
51.923094224367127

来看下正确答案。注意指数函数的不定积分还是指数函数本身。

from sympy.interactive import printing
printing.init_printing(use_latex=True)

\[\int_{1}^{4}e^{x}=e^{4}-e^{1}
\]

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()

再看看计算个二次函数的积分。随便写个二次函数。

\[2x^{2}+3x+4
\]

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 的积分吧。

\[\int_{-5}^{5}2x^{2}+3x+4 dx
\]

CompIntegralbyladder(Quadratic,-5,5)
206.69999999999825

下面来计算下正确的积分值。

因为:

\[\int2x^{2}+3x+4dx=\frac{2}{3}x^3+\frac{3}{2}x^2+4x
\]

所以:

\[\int_{-5}^{5}2x^{2}+3x+4dx=[\frac{2}{3}x^3+\frac{3}{2}x^2+4x]_{-5}^{5}
\]

def Integral(x):
return (2*x**3)/3 + (3*x**2)/2 + 4*x
Integral(5)-Integral(-5)
207

可见,梯形法计算积分还是比较准确的。

Numpy 练习题的更多相关文章

  1. numpy练习题

    1. 导入numpy库并简写为 np import numpy as np 2. 打印numpy的版本和配置说明 print(np.__version__) print(np.show_config( ...

  2. 101道Numpy、Pandas练习题

    无论是数据分析还是机器学习,数据的预处理必不可少. 其中最常用.最基础的Python库非numpy和pandas莫属,很多初学者可能看了很多教程,但是很快就把用法忘光了. 光看不练假把式,今天向大家推 ...

  3. 快速入门Numpy

    教你十分钟学会使用numpy. 简单介绍一下numpy的话,这就是一个基于多维数组的python科学计算的核心库. 基本信息 # 一般用np作为numpy的缩写 import numpy as np ...

  4. AI 学习路线

    [导读] 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献,内容涵盖AI入门基础知识.数据分析挖掘.机器学习.深度学习.强化学习.前 ...

  5. [转]numpy 100道练习题

    100 numpy exercise 翻译:YingJoy 网址: https://www.yingjoy.cn/ 来源:https://github.com/rougier/numpy-100 Nu ...

  6. PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

  7. 对numpy.meshgrid()理解

    一句话解释numpy.meshgrid()——生成网格点坐标矩阵.关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼?看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵, ...

  8. python数据分析三剑客之: Numpy

    数据分析三剑客之: Numpy 一丶Numpy的使用 ​ numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...

  9. NumPy 百题大冲关,冲鸭!

    角色名称:NumPy 角色描述:NumPy是一个NASA都在用的扩展库. NumPy提供了许多高级的数值编程技能,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而战斗.是很多大型 ...

随机推荐

  1. 神奇的随机数rand()

    随机数在统计理论中占有很重要的地位,很多应用都需要用到他,系统自带的rand()函数产生的是伪随机数,所以该如何真正的随机数呢? 1.c语言中的时间函数 关于c语言我查到的两个比较好的博文是:http ...

  2. 小技巧------教你释放C盘空间

    1.删除休眠文件hiberfil.sys. 该文件在c盘根部目录为隐藏的系统文件,隐藏的这个hiberfil.sys文件大小正好和自己的物理内存是一致的,当你让电脑进入休眠状态时,windows7在关 ...

  3. 沈阳网络赛K-Supreme Number【规律】

    26.89% 1000ms 131072K A prime number (or a prime) is a natural number greater than 11 that cannot be ...

  4. F(N)---hdu2802(寻找循环节)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2802 f[1] = 1; f[2] = 7; f[n] = (f[n-2] - (n-1)*(n-1) ...

  5. Python开发【Tornado】:简介与使用

    Tornado框架 简介: Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和 ...

  6. [Luogu4331][Baltic2004]数字序列

    原题请见<左偏树的特点及其应用>BY 广东省中山市第一中学 黄源河 luogu 题意 给出序列\(a[1...n]\),要求构造一个不下降序列\(b[1...n]\)使得\(\sum_{i ...

  7. 构造HTTP请求Header实现“伪造来源IP”(转)

    原文:http://zhangxugg-163-com.iteye.com/blog/1663687 构造 HTTP请求 Header 实现“伪造来源 IP ” 在阅读本文前,大家要有一个概念,在实现 ...

  8. Http协议中Cookie详细介绍(转)

    原文:http://www.169it.com/article/3217120921.html Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存C ...

  9. python之threading.local

    简述: threading.local是全局变量但是它的值却在当前调用它的线程当中 作用: 在threading module中,有一个非常特别的类local.一旦在主线程实例化了一个local,它会 ...

  10. 文本IO 二进制IO

    一.文本IO  字符流 使用PrintWriter写入文件后,必须调用close(),否则数据不能正确保存在文件中. Scanner的next()读取一个由分隔符分隔的字符串,nextLine()读取 ...