Python:numpy总结(4)

31、chr函数,获取指定的字符

例子:

#获取指定的字符for i in range(65,70):

print str(chr(i))

结果:

A BCDE

32、random.shuffle

例子:

ll=range(9)#返回列表print ll #shuffle函数随机打乱列表中的元素顺序print random.shuffle(ll)

print ll

结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8]

None

[8, 5, 1, 4, 2, 6, 0, 3, 7]

shuffle函数随机打乱列表中的元素顺序

33、vdot 点积

例子:

#vdot 返回两向量的点积l1=[1,2,3] l2=[4,5,6] ll=[l1,l2]

print vdot(l1,l2)

print dot(l1,l2)

print mat(l1)*mat(l2).T

print mat(ll)

结果:

32

32

[[32]][[1 2 3][4 5 6]]

vdot 和 dot都可以获取向量的点积。

区别:

ll=[[1,2,3],[4,5,6],[1,2,3]]print dot(mat(ll),mat(ll).T)

print vdot(mat(ll),mat(ll))

结果:

[[14 32 14] [32 77 32] [14 32 14]][[105]]

总结:对于向量来说,vdot dot向量的点积结果相同。 对于矩阵来说,dot是矩阵的点积。 而vdot是对应位置的元素乘积求和。 结果中的105=1^2+2^2+3^3+4^2+5^2+6^2+1^2+2^2+3^3

34、次方计算**

例子:

print 3*2**2print 3*2**0.5print (3*2)**2print (3*2)**0.5

结果:

12 4.24264068712 36 2.44948974278

可见 **次方计算优先级要高!

35、max函数

例子:

ll=[3,4,6,2,89,9,3,2]

print max(ll) l2=[[3,4,6,2,89,9,3,2],[3,6,7,8,983,3,5,6]]print max(l2[0])

print max(l2)

结果:

89

89

[3, 6, 7, 8, 983, 3, 5, 6]

对于矩阵的最大值的求法,还不知道怎么搞。稍后更新一下。

36、mgrid函数

#开始值,结束值,步长。如果步长为虚数,表示产生的个数长度print mgrid[-5:5:3j] #结果:[-5. 0. 5.]print mgrid[-5:5:3] #结果:[-5 -2 1 4]print '*'*20print mgrid[-5:5:3j,-5:5:3j]

print '*'*20print mgrid[-5:5:3,-5:5:3]

结果:

[-5. 0. 5.] [-5 -2 1 4] ********************[[[-5. -5. -5.] [ 0. 0. 0.] [ 5. 5. 5.]] [[-5. 0. 5.] [-5. 0. 5.] [-5. 0. 5.]]] ******************** [[[-5 -5 -5 -5] [-2 -2 -2 -2] [ 1 1 1 1] [ 4 4 4 4]] [[-5 -2 1 4] [-5 -2 1 4] [-5 -2 1 4] [-5 -2 1 4]]]

mgrid函数说明:开始值,结束值,步长。如果步长为虚数,表示产生的个数长度。 

对照结果即可知道函数的功能。

37、ogrid函数

例子:

print ogrid[-5:5:3j]

print ogrid[-5:5:3]

print ogrid[-5:5:3j,-5:5:3j]

print ogrid[-5:5:3,-5:5:3]

结果:

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

ogrid跟mgrid一样。不同的是,一个数矩阵,一个数组形式。
第三个擦数如果是实数,说明是步长。如果是虚数,说明是个数。 

ogrid[-5:5:3,-5:5:3]第一部分产生多行一列,第二部分产生一行多列。这与mgrid不同。

38、random函数

print random.seed(1) #要每次产生随机数相同就要设置种子,相同种子数的Random对象,相同次数生成的随机数字是完全相同的

#用于生成一个指定范围内的随机符点数print random.uniform(-1,1,5)

#结果:[ 0.40254497 -0.42350395 -0.67640645 -0.54075394 -0.99584028]#均匀分布

#用于生成一个0到1的随机符点数: 0 <= n < 1.0print random.random()

print random.random(5)

print random.rand(2,3)#2行3列 结果: None 0.417022004703

[ 7.20324493e-01 1.14374817e-04 3.02332573e-01 1.46755891e-01 9.23385948e-02][[ 0.18626021 0.34556073 0.39676747][ 0.53881673 0.41919451 0.6852195 ]]

#用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

print random.randint(5, 10)

print random.randint(5,10,size=(5,5)) 结果:

None 8

[[9 5 6 8 5] [5 6 9 9 6] [7 9 7 9 8] [9 7 9 7 9] [6 6 5 6 6]]

更多关于random的函数的解析,请参看这篇文章:http://blog.csdn.net/pipisorry/article/details/39086463

39、tofile、fromfile

例子:

a =arange(0,12) a.shape = 3,4print a a.tofile("a.bin") b = fromfile("a.bin", dtype=float) # 按照float类型读入数据print b # 读入的数据是错误的print a.dtype # 查看a的dtypeb = fromfile("a.bin", dtype=int32) # 按照int32类型读入数据print b # 数据是一维的b.shape = 3, 4 # 按照a的shape修改b的shapeprint b

结果:

None[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]][ 2.12199579e-314 6.36598737e-314 1.06099790e-313 1.48539705e-313 1.90979621e-313 2.33419537e-313] int32 [ 0 1 2 3 4 5 6 7 8 9 10 11][[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]

使用数组的方法函数tofile可以方便地将数组中数据以二进制的格式写进文件。tofile输出的数据没有格式,因此用numpy.fromfile读回来的时候需要自己格式化数据。

Note: 1. 读入的时候设置正确的dtype和shape才能保证数据一致。 并且tofile函数不管数组的排列顺序是C语言格式的还是Fortran语言格式的,统一使用C语言格式输出。 2. sep关键字参数:此外如果fromfile和tofile函数调用时指定了sep关键字参数的话, 数组将以文本格式输入输出。{这样就可以通过notepad++打开查看, 不过数据是一行显示,不便于查看} user_item_mat.tofile(user_item_mat_filename, sep=’ ‘)

40、numpy.load和numpy.save

例子:

a =arange(0,12)

a.shape = 3,4print asave('a.npy',a) c=load('a.npy') print c

结果:

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

numpy.load和numpy.save函数(推荐在不需要查看保存数据的情况下使用) 以NumPy专用的二进制类型保存数据,这两个函数会自动处理元素类型和shape等信息, 使用它们读写数组就方便多了,但是numpy.save输出的文件很难和其它语言编写的程序读入。 Note: 1. 文件要保存为.npy文件类型,否则会出错 2. 保存为numpy专用二进制格式后,就不能用notepad++打开(乱码)看了,这是相对tofile内建函数不好的一点

numpy.savez函数 如果你想将多个数组保存到一个文件中的话,可以使用numpy.savez函数。savez函数的第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0, arr_1, …。savez函数输出的是一个压缩文件(扩展名为npz),其中每个文件都是一个save函数保存的npy文件,文件名对应于数组名。load函数自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容: 如果你用解压软件打开result.npz文件的话,会发现其中有三个文件:arr_0.npy, arr_1.npy, sin_array.npy,其中分别保存着数组a, b, c的内容。

a = array([[1,2,3],[4,5,6]]) b = arange(0, 1.0, 0.1) c = sin(b) savez("result.npz", a, b, sin_array = c) r =load("result.npz")

print r["arr_0"] # 数组a

print r["arr_1"] # 数组b p

rint r["sin_array"] # 数组c

结果:

None[[1 2 3] [4 5 6]][ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] [ 0. 0.09983342 0.19866933 0.29552021 0.38941834 0.47942554 0.56464247 0.64421769 0.71735609 0.78332691]

numpy.savetxt和numpy.loadtxt(推荐需要查看保存数据时使用) Note:savetxt缺省按照’%.18e’格式保存数据, 可以修改保存格式为‘%.8f’(小数点后保留8位的浮点数), ’%d’(整数)等等 总结: 载入txt文件:numpy.loadtxt()/numpy.savetxt() 智能导入文本/csv文件:numpy.genfromtxt()/numpy.recfromcsv() 高速,有效率但numpy特有的二进制格式:numpy.save()/numpy.load()

39、40部分来源:http://blog.csdn.net/pipisorry/article/details/39088003。详细内容请参看这个链接。

41、permutation函数

例子:

#混淆位置。如果是多维数组,则混淆一维的。例如下面的arr.print random.permutation(10)

print random.permutation([1, 4, 9, 12, 15]) arr=arange(9).reshape((3,3))

print arr

print random.permutation(arr)

结果:

None [2 9 6 4 0 3 1 7 8 5] [12 1 4 9 15][[0 1 2] [3 4 5] [6 7 8]]

permutation混淆位置。如果是多维数组,则混淆一维的。例如下面的arr.

42、complex构造复数

例子:

print complex(0,100)#结果:100j

43、norm求范数

例子:

from scipy.linalg.misc import normprint norm([8,6,10])

结果:

14.1421356237

默认情况下,求二范数。也就是各个元素的平方和再开平方。 当然,也可以求取其他范数。例如p范数、无穷范数等。 我这里import写的是scipy。其实numpy里面也有这个函数。详细的其他范数的求法请参考官网http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.linalg.norm.html内容的介绍。

原文发布于微信公众号 - 机器学习算法与Python学习(guodongwei1991)

原文发表时间:2016-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端儿

队花的烦恼一

ACM队的队花C小+经常抱怨:“C语言中的格式输出中有十六、十、八进制输出,然而却没有二进制输出,哎,真遗憾!谁能帮我写一个程序实现输入一个十进制数n,输出它的...

792
来自专栏Python小屋

针对递归函数的优化与Python修饰器实现

我们围绕一个数学问题来说明本文的思想,组合数C(n,i),也就是从n个元素中任选i个,共有多少种选法。当然,这个问题有很多种求解方法,例如【最快的组合数算法之P...

4169
来自专栏生信宝典

Python学习教程(二)

输入输出 交互式输入输出 在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以分别使用raw_input...

2758
来自专栏夏时

PHP 常用函数大全

5462
来自专栏编程之旅

Python——爬虫入门XPath的使用

Xpath即为XML路径语言(XML Path Language)。它是一种用来确定XML文档中某部分位置的语言。

1184
来自专栏吴伟祥

关于“分类”的应用 原

三、SQL中区分类别的过滤条件:比如取分类2,那么就是 2=2 <![CDATA[ & ]]>type

842
来自专栏xingoo, 一个梦想做发明家的程序员

圆排列问题-回溯法

问题描述:     给定n个大小不等的圆 c1 c2 c3 c4 要将n个圆排进一个矩形框中,且要求底边相切。找出有最小长度的圆排列。     例如:当n=3,...

2499
来自专栏Golang语言社区

使用 Go 语言学会 Tensorflow

Tensorflow 并不是一个专门用于机器学习的库,相反的,它是一个通用的用于图计算的库。它的核心部分是用 C++ 实现的,同时还有其它语言的接口库。Go 语...

4822
来自专栏用户2442861的专栏

限制QLineEdit的数值输入范围

QLineEdit *lineEdit = new QLineEdit(this);

1.2K1
来自专栏从流域到海域

《笨办法学Python》 第41课手记

《笨办法学Python》 第41课手记 本节课的代码有168行,但是冗长不代表困难,只是print里面的游戏说明内容太多,整体来说是很容易的,你要锻炼自己的耐心...

3417

扫码关注云+社区

领取腾讯云代金券