标签(空格分隔): 王小草机器学习笔记
python的强大之处不但因为简洁易学高效,还在于她有许多库,可以方便我们得到想要的计算。比如今天讲的numpy库,为python提供了快速的多维数组的处理能力。有人数,numpy库的出现使得python可以像matlab一样去计算了。(matlab是10年前乃至今日仍然大受青睐的草稿本式的编程语言)。
1. 导入Numpy库
要调用numpy库,我们就要导入这个库,导入的语句就一句。
as 后面是重命名,也可以说是缩写,在我们的程序中,我们只要写np,自动就代码numpy。这是约定俗称的一个简称,当其他人阅读你的代码的时候,他们也知道np代表的就是Numpy,所以缩写最好不要自己创新。
import numpy as np
2. 使用Aarry创建数组
2.1 通过Array传递List
标准Python的列表(list)中,元素本质是对象。
如:L = [1, 2, 3],需要3个指针和三个整数对象,对于数值运算比较浪费内存和CPU。
因此,Numpy提供了ndarray(N-dimensional array object)对象:存储单一数据类型的多维数组。
创建一维数组:
L = [1, 2, 3, 4, 5, 6]
print L
a = np.array(L)
print a
打印结果:
[1, 2, 3, 4, 5, 6]
[1 2 3 4 5 6]
创建多维数组:
嵌套多个list
b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print b
打印结果:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
2.2 数组大小
查看数组大小
print a.shape
print b.shape
打印结果:
a是6行1列,b是3行4列
(6L,)
(3L, 4L)
强制修改数组大小
1.将3*4的数组改成4*3的数组
b.shape = 4, 3
print b
打印结果:
从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变,还是按照1,2,3,4,5…12这样的顺序来排列的。
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
2.当某个轴为-1时,将根据数组元素的个数自动计算此轴的长度
b.shape = 2, -1
print b
打印结果:
行是2行,列为-1的话就表示根据行来定,所以是6列
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
修改数组大小后成新数组
使用reshape方法,可以创建改变了尺寸的新数组,原数组的shape保持不变
c = b.reshape((4, -1))
print c
创建的新数组,仍然与老数组共享内存,修改任意一个将影响另外一个。
比如修改b数组的第1行第2列的元素为20,再来看b和c两个数组的变化
2.3 获取数组的元素类型
查看数据类型
print a.dtype
print b.dtype
创建指定元素类型的数组
可以通过dtype参数在创建时指定元素类型
d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], dtype=np.float)
f = np.array([[1+4j, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], dtype=np.complex)
print d
print f
打印结果:分别是浮点型与复数型
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
[[ 1.+4.j 2.+0.j 3.+0.j 4.+0.j]
[ 5.+0.j 6.+0.j 7.+0.j 8.+0.j]
[ 9.+0.j 10.+0.j 11.+0.j 12.+0.j]]
更改元素类型
如果更改元素类型,可以使用astype安全的转换
f = d.astype(np.int)
print f
打印结果:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
3. 使用函数创建
3.1 arrage
如果生成一定规则的数据,可以使用NumPy提供的专门函数
arange函数类似于python的range函数:指定起始值、终止值和步长来创建数组
和Python的range类似,arange同样不包括终值;但arange可以生成浮点类型,而range只能是整数类型
生成1开始,10结束(不包含10),步长为0.5的一个数组
a = np.arange(1, 10,