NumPy基础与进阶.docx

上传人:b****6 文档编号:13051185 上传时间:2023-06-10 格式:DOCX 页数:23 大小:23.81KB
下载 相关 举报
NumPy基础与进阶.docx_第1页
第1页 / 共23页
NumPy基础与进阶.docx_第2页
第2页 / 共23页
NumPy基础与进阶.docx_第3页
第3页 / 共23页
NumPy基础与进阶.docx_第4页
第4页 / 共23页
NumPy基础与进阶.docx_第5页
第5页 / 共23页
NumPy基础与进阶.docx_第6页
第6页 / 共23页
NumPy基础与进阶.docx_第7页
第7页 / 共23页
NumPy基础与进阶.docx_第8页
第8页 / 共23页
NumPy基础与进阶.docx_第9页
第9页 / 共23页
NumPy基础与进阶.docx_第10页
第10页 / 共23页
NumPy基础与进阶.docx_第11页
第11页 / 共23页
NumPy基础与进阶.docx_第12页
第12页 / 共23页
NumPy基础与进阶.docx_第13页
第13页 / 共23页
NumPy基础与进阶.docx_第14页
第14页 / 共23页
NumPy基础与进阶.docx_第15页
第15页 / 共23页
NumPy基础与进阶.docx_第16页
第16页 / 共23页
NumPy基础与进阶.docx_第17页
第17页 / 共23页
NumPy基础与进阶.docx_第18页
第18页 / 共23页
NumPy基础与进阶.docx_第19页
第19页 / 共23页
NumPy基础与进阶.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

NumPy基础与进阶.docx

《NumPy基础与进阶.docx》由会员分享,可在线阅读,更多相关《NumPy基础与进阶.docx(23页珍藏版)》请在冰点文库上搜索。

NumPy基础与进阶.docx

NumPy基础与进阶

【NumPy基础】100道numpy练习——初学与入门篇

今天在上看theanotutorial,发现一个numpy-100-exercise,介绍numpy一些基本用法的,不过不是很具体,我利用闲暇时间照着敲了一些,权且当作翻译吧,增加函数的原型和详细介绍。

持续更新。

一、初学者10道

1、在python环境中导入numpy包,并命名为np

[python] viewplaincopy

1.

18px;"

2.>>>> import numpy as np

2、查看numpy版本和配置信息

[python] viewplaincopy

1.

18px;"

2.>>>> print np.__version__  

3.>>> np.__config__.show()

3、创建零向量,zeros函数

[python] viewplaincopy

1.

18px;"

2.>>>> z=np.zeros((2,3))  

3.>>> print z  

4.[[ 0.  0.  0.]  

5. [ 0.  0.  0.]]

4、将上面的零向量的第二行第三列元素置为1。

注意python中行列下班是从0开始。

[python] viewplaincopy

1.

18px;"

2.>>>>z[1,2]=1  

3.>>> print z  

4.[[ 0.  0.  0.]  

5. [ 0.  0.  1.]]

5、arange函数,创建一个在给定范围的向量。

[python] viewplaincopy

1.

18px;"

2.>>>> z=np.arange(1,101)    %1~100范围,注意不包括101  

3.>>> print z

6、reshape函数,将array变形为矩阵

[python] viewplaincopy

1.

18px;"

2.>>>> Z = np.arange(9).reshape(3,3)  

3.>>> print Z  

4.[[0 1 2]  

5. [3 4 5]  

6. [6 7 8]]

7、nonzero函数,寻找非0元素的下标

[python] viewplaincopy

1.

18px;"

2.>>>> nz=np.nonzero([1,2,3,0,0,4,0])  

3.>>> nz  

4.(array([0, 1, 2, 5]),)

8、eye函数,生成单位向量

[python] viewplaincopy

1.

18px;"

2.>>>> z=np.eye(3)  

3.>>> print z  

4.[[ 1.  0.  0.]  

5. [ 0.  1.  0.]  

6. [ 0.  0.  1.]] 

9、diag函数,diagonal对角线。

[python] viewplaincopy

1.

18px;"

2.>>>> z=np.diag([1,2,3,4],k=0)   %k=0,以[1,2,3,4]为对角线  

3.>>> print z  

4.[[1 0 0 0]  

5. [0 2 0 0]  

6. [0 0 3 0]  

7. [0 0 0 4]]  

8.  

9.>>> z=np.diag([1,2,3,4],k=1)   %k=1,[1,2,3,4]在对角线上一行  

10.>>> print z  

11.[[0 1 0 0 0]  

12. [0 0 2 0 0]  

13. [0 0 0 3 0]  

14. [0 0 0 0 4]  

15. [0 0 0 0 0]]  

16.  

17.>>> z=np.diag([1,2,3,4],k=-1)  %k=-1,[1,2,3,4]在对角线下一行  

18.>>> print z  

19.[[0 0 0 0 0]  

20. [1 0 0 0 0]  

21. [0 2 0 0 0]  

22. [0 0 3 0 0]  

23. [0 0 0 4 0]]

10、random模块的random函数,生成随机数

random.random()用于生成一个0到1的随机符点数:

0<=n<1

1.

18px;"

2.>>>> Z = np.random.random((3,3))  

3.>>> print Z  

4.[[ 0.95171484  0.61394126  0.38864802]  

5. [ 0.41943918  0.9398714   0.31608202]  

6. [ 0.9993507   0.91717093  0.73002723]] 

random.uniform(a,b),用于生成1个指定范围内的随机浮点数,两个参数其中一个是上限,一个是下限。

如果a>b,则生成的随机数n:

a<=n<=b。

如果a

random.randint(a,b),用于生成1个指定范围内的整数。

其中参数a是下限,参数b是上限,生成的随机数n:

a<=n<=b

random.randrange([start],stop[,step]),从指定范围内,按指定基数递增的集合中获取一个随机数。

如:

random.randrange(10,100,2),结果相当于从[10,12,14,16,...96,98]序列中获取一个随机数。

random.randrange(10,100,2)在结果上与random.choice(range(10,100,2)等效。

 

random.choice从序列中获取一个随机元素。

其函数原型为:

random.choice(sequence)。

参数sequence表示一个有序类型。

这里要说明一下:

sequence在python不是一种特定的类型,而是泛指一系列的类型。

list,tuple,字符串都属于sequence。

有关sequence可以查看python手册数据模型这一章。

下面是使用choice的一些例子:

printrandom.choice("学习Python")

printrandom.choice(["JGood","is","a","handsome","boy"])

printrandom.choice(("Tuple","List","Dict"))

 

二、入门级10道

1、创建一个8*8的“棋盘”矩阵。

[python] viewplaincopy

1.

18px;">>>> z=np.zeros((8,8),dtype=int)  

2.>>> z[1:

:

2,:

:

2]=1     %1、3、5、7行&&0、2、4、6列的元素置为1  

3.>>> print z  

4.[[0 0 0 0 0 0 0 0]  

5. [1 0 1 0 1 0 1 0]  

6. [0 0 0 0 0 0 0 0]  

7. [1 0 1 0 1 0 1 0]  

8. [0 0 0 0 0 0 0 0]  

9. [1 0 1 0 1 0 1 0]  

10. [0 0 0 0 0 0 0 0]  

11. [1 0 1 0 1 0 1 0]]  

12.>>> z[:

:

2,1:

:

2]=1  

13.>>> print z  

14.[[0 1 0 1 0 1 0 1]  

15. [1 0 1 0 1 0 1 0]  

16. [0 1 0 1 0 1 0 1]  

17. [1 0 1 0 1 0 1 0]  

18. [0 1 0 1 0 1 0 1]  

19. [1 0 1 0 1 0 1 0]  

20. [0 1 0 1 0 1 0 1]  

21. [1 0 1 0 1 0 1 0]]  

2、min()、max()函数

[python] viewplaincopy

1.

18px;">>>> z=np.random.random((10,10))  

2.>>> zmin,zmax=z.min(),z.max()  

3.>>> print zmin,zmax  

4.0.014230501632 0.99548760299  

3、函数tile(A,reps),reps即重复的次数,不仅可以是数字,还可以是array。

比如构造棋盘矩阵:

[python] viewplaincopy

1.

18px;">>>> z=np.tile(np.array([[0,1],[0,1]]),(4,4))  

2.>>> print z  

3.[[0 1 0 1 0 1 0 1]  

4. [0 1 0 1 0 1 0 1]  

5. [0 1 0 1 0 1 0 1]  

6. [0 1 0 1 0 1 0 1]  

7. [0 1 0 1 0 1 0 1]  

8. [0 1 0 1 0 1 0 1]  

9. [0 1 0 1 0 1 0 1]  

10. [0 1 0 1 0 1 0 1]]  

4、归一化,将矩阵规格化到0~1,即最小的变成0,最大的变成1,最小与最大之间的等比缩放。

[python] viewplaincopy

1.

18px;">>>> Z = np.random.random((5,5))  

2.>>> Zmax,Zmin = Z.max(), Z.min()  

3.>>> Z = (Z - Zmin)/(Zmax - Zmin)  

4.>>> print Z  

5.[[ 0.          0.32173291  0.17607851  0.6270374     

6.  

7.0.95000808]  

8. [ 0.49153473  0.70465605  0.61930085  0.00303294  1.          

9.  

10.]  

11. [ 0.4680561   0.88742782  0.29899683  0.80704789    

12.  

13.0.12300414]  

14. [ 0.05094248  0.23065875  0.82776775  0.07873239    

15.  

16.0.50644422]  

17. [ 0.27417053  0.78679222  0.517819    0.5649124   0.4716856   

18.  

19.]]  

5、矩阵点乘

[python] viewplaincopy

1.

18px;">>>> z=np.dot(np.ones((5,3)),np.ones((3,2)))  

2.>>> print z  

3.[[ 3.  3.]  

4. [ 3.  3.]  

5. [ 3.  3.]  

6. [ 3.  3.]  

7. [ 3.  3.]]  

6、矩阵相加,5*5矩阵+1*5的向量,相当于每一行都加上1*5矩阵

[python] viewplaincopy

1.

18px;">>>> Z = np.zeros((5,5))  

2.>>> Z += np.arange(5)  

3.>>> print Z  

4.[[ 0.  1.  2.  3.  4.]  

5. [ 0.  1.  2.  3.  4.]  

6. [ 0.  1.  2.  3.  4.]  

7. [ 0.  1.  2.  3.  4.]  

8. [ 0.  1.  2.  3.  4.]]  

7、linspace函数,在给定区间中生成均匀分布的给定个数。

函数原型linspace(start,stop,num=50,endpoint=True, retstep=False)

[python] viewplaincopy

1.

18px;">>>> Z = np.linspace(0,10,11,endpoint=True, retstep=False)  

2.>>> print Z  

3.[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.]  

生成0~10之间均匀分布的11个数,包括0和1。

若endpoint=False,则10不包括在里面。

若retstep=False,会同时返回均匀区间中每两个数的间隔。

8、sort函数。

调用random模块中的random函数生成10个随机数,然后sort排序。

[python] viewplaincopy

1.

18px;">>>> Z = np.random.random(10)  

2.>>> Z.sort()  

3.>>> print Z  

4.[ 0.15978787  0.28050494  0.35865916  0.40047826  0.45141311    

5.  

6.0.4828367  

7.  0.66133575  0.66775779  0.69278544  0.98095989]  

9、allclose函数,判断两个array在误差范围内是否相等

函数原型allclose(a,b,rtol=1e-05,atol=1e-08),若absolute(a- b)<=(atol+rtol*absolute(b))则相等。

[python] viewplaincopy

1.

18px;">A = np.random.randint(0,2,5)  

2.B = np.random.randint(0,2,5)  

3.equal = np.allclose(A,B)  

4.print equal  

10、mean函数,求平均值

[python] viewplaincopy

1.

18px;">>>> Z = np.random.random(30)  

2.>>> m = Z.mean()  

3.>>> print m  

4.0.362299527973  

5.  

6.>>> A = np.random.randint(0,2,5)  

7.>>> B = np.random.randint(0,2,5)  

8.>>> equal = np.allclose(A,B)  

9.>>> print equal  

10.False  

11.  

注:

randint(min,max,num)生成大小为num的array,数值范围min~max

 

【NumPy基础】100道numpy练习——进阶篇

NumPy只是一个数值计算的工具包,在实际的算法实现中来熟悉NumPy才是有效的,因此后面不打算继续写了,到此文为止,基本的语法已经够用了,之后在实践中总结可能效果更好。

而且遇到问题参考NumPy官网文档即可。

1、读入文件中的数据,例如一个example.txt,里面的数据如下:

[python] viewplaincopy

1.1,2,3,4  

2.5,,,6  

3.7,8,,9  

读入该文件的代码:

[python] viewplaincopy

1.>>> Z = np.genfromtxt("example.txt", delimiter=",")  

2.>>> print Z  

3.[[ 1. 2. 3. 4.]  

4.[ 5. nan nan 6.]  

5.[ 7. 8. nan 9.]]  

note:

np.genfromtxt()函数第一个参数表示文件路径名,delimiter是分隔符,在我们的exampl.txt中分隔符是逗号“,”,故设置为逗号。

顺便提一下,很多数据文件都是以csv后缀格式给出的,csv就是逗号分隔符文件。

 

2、numpy的高级特性:

生成器。

利用生成器函数创建数组。

[python] viewplaincopy

1.>>> def generate():

  

2.... for x in xrange(10):

  

3.... yield x   

4....   

5.>>> Z = np.fromiter(generate(),dtype=float,count=-1)  

6.>>> print Z  

7.[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]  

note:

其中的yield关键字使得generate()变成生成器,这是numpy的高级特性。

3、bincount()函数,输出数组中每个数出现的次数。

output的下标代表原数组中的数,output的值就是该数出现的次数,举例:

[python] viewplaincopy

1.>>> Z=[0,2,4,8,8]  

2.>>> np.bincount(Z)  

3.array([1, 0, 1, 0, 1, 0, 0, 0, 2])  

可以看到8出现了两次。

4、bincount(x,weights=None,minlength=None),其中weights表示权重,用法如下:

[python] viewplaincopy

1.>>> X = [1,2,3,4,5,6]  

2.>>> I = [1,3,9,3,4,1]  

3.>>> F = np.bincount(I,X)  

4.>>> print F  

5.[ 0. 7. 0. 6. 5. 0. 0. 0. 0. 3.]  

note:

以I为输入,X是权重。

分析一下:

F[0]=0,因为I中没有出现过0,F[1]=7,因为I中1出现了两次,并且它们的权重为1、6,故F[1]=1*1+1*6

 

5、Consideringa(w,h,3)imageof(dtype=ubyte),computethe numberofuniquecolors

[python] viewplaincopy

1.# Author:

 Nadav Horesh  

2.w,h = 16,16  

3.I = np.random.randint(0,2,(h,w,3)).astype(np.ubyte)  

4.F = I[...,0]*256*256 + I[...,1]*256 +I[...,2]  

5.n = len(np.unique(F))  

6.print np.unique(I)  

 

6、一个四维的数组,以后两维度为单位,计算它们的和,比如一个1*2*3*4的数组,则以后面3*4维度为单位,输出1*2的sum,举例:

[python] viewplaincopy

1.>>> A = np.random.randint(0,10,(1,2,3,4))  

2.>>> print A  

3.[[[[2 7 9 7]  

4.[6 6 8 2]  

5.[0 0 9 3]]  

6.[[5 4 1 4]  

7.[5 7 9 7]  

8.[8 4 1 4]]]]  

9.>>> A.reshape(A.shape[:

-2] + (-1,))  

10.array([[[2, 7, 9, 7, 6, 6, 8, 2, 0, 0, 9, 3],  

11.[5, 4, 1, 4, 5, 7, 9, 7, 8, 4, 1, 4]]])  

12.>>> sum = A.reshape(A.shape[:

-2] + (-1,)).sum(axis=-1)  

13.>>> print sum  

14.[[59 59]]  

 

7、Consideringaone-dimensionalvectorD,howtocompute meansofsubsetsofDusingavectorSofsamesize describingsubsetindices?

[python] viewplaincopy

1.>>> D = np.random.uniform(0,1,100)  

2.>>> S = np.random.randint(0,10,100)  

3.>>> D_sums = np.bincount(S, weights=D)  

4.>>> D_counts = np.bincount(S)  

5.>>> print D_sums  

6.[ 3.37619132 6.13452126 3.84121952 5.27577033 4.45979323  

7.7.26807049  

8.6.00231146 6.72050881 4.1281527 6.55666661]  

9.>>> print D_counts  

10.[ 6 12 10 8 7 13 13 12 7 12]  

11.>>> D_means = D_sums / D_counts  

12.>>> print D_means  

13.[ 0.56269855 0.5112101 0.38412195 0.65947129 0.63711332  

14.0.55908235  

15.0.46171627 0.5600424 0.5897361 0.54638888]  

 

8、在数组[1,2,3,4,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2