写在前面:
python的中文意思是蟒蛇,而anaconda的中文意思也有巨蟒的意思,理所当然,anaconda和python之间就有着非常微妙的关系。学习numpy的话还是推荐直接安装anaconda,里面有很多三方库和依赖,大大降低了安装的难度,推荐~
numpy是什么呢?使用python学习机器学习的话,很容易就会接触到numpy,根据百度词条的解释:NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵。也就是说,numpy是用来处理大型矩阵的一个工具,它可以创建一定大小的矩阵,并且对于矩阵转置,矩阵相乘都有良好的支持。
一、numpy的使用示例:
按照惯例,引用的时候别名一般为np
>>> import numpy as np
1)构造array,arange,ones,zeros,empty
arange是numpy中的方法,相当于python里的(x)range,不同的是arange返回的是一个array,而(x)range返回的是一个range对象
>>> np.arange(6)
array([0, 1, 2, 3, 4, 5])
此外,arange的步长还可以是小数
>>> np.arange(6,7,0.2)
array([ 6. , 6.2, 6.4, 6.6, 6.8])
ones和zeros就是构造全为1或者是0的数组
>>> np.ones(5)
array([ 1., 1., 1., 1., 1.])
>>> np.zeros((5,2))
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
构造5*2的全为0的数组
empty就是只指定数组的大小,但是不指定数组的内容,根据电脑的不同,显示出的结果不同。所以在使用前请一定要记得赋值
>>> np.empty(6)
array([ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324,
1.48219694e-323, 1.97626258e-323, 2.47032823e-323])
除了上面几种方法,还可以使用list来赋值:
>>> np.array([1,2,2.1])
array([ 1. , 2. , 2.1])
2)shape和reshape
一个是名词,表示形状大小,一个是动词,表示的是重新生成形状为...的矩阵
>>> np.arange(6).reshape(2,3)
array([[0, 1, 2],
[3, 4, 5]])
用reshape将刚刚生成的array转换为2*3形状的array
>>> np.arange(6).reshape(2,3).shape
(2, 3)
用shape查看这个array的行列数
注意:reshape的数组大小和原数组大小一定要保持一致,否则会报错
3)ndim,dim是dimension的缩写,n dimension代表n维,该数组有几维
用刚刚的数组来说:
>>> np.arange(6).reshape(2,3).ndim
2
一共有2维,是个二维数组
>>> np.arange(8).reshape(2,2,2).ndim
3
这就是个三维数组了
4)dtype.name,查看数值类型
>>> np.arange(8).reshape(2,2,2).dtype
dtype('int64')
>>> np.arange(8).reshape(2,2,2).dtype.name
'int64'
可以看出来dtype就是知道这个数组的类型是什么,而name就是去除这个类型的名称
>>> np.ones(5).dtype.name
'float64'
比较特别的是,ones和zeros出来的数据的类型都是float64的
5)itemsize
查看每个数组元素的字节大小
>>> np.arange(6).reshape(2,3).itemsize
8
刚刚看了,每个元素的类型是int64,而int64的字节大小就是8
7.size
看名字很容易知道,就是这个array的元素个数
>>> np.arange(6).reshape(2,3).size
6
>>> np.arange(8).reshape(2,2,2).size
8
8.type
可以用type来查看下这个array的类型:
>>> a=np.arange(8).reshape(2,2,2)
>>> type(a)
<class 'numpy.ndarray'>
是class中的n维数组
9.linspace
就是均分距离的意思
>>> np.linspace( 0, 1, 11)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
将0-1均匀的分为11份
二、数组运算
1.基本算数运算,加减乘除法
>>> a=np.array([1,2,3,4])
>>> b=np.array([5,6,7,8])
>>> a+b
array([ 6, 8, 10, 12])
>>> a-b
array([-4, -4, -4, -4])
>>> a*b
array([ 5, 12, 21, 32])
>>> a/b
array([ 0.2 , 0.33333333, 0.42857143, 0.5 ])
可以看出,基本算数运算时基于每个对应元素之间的
2.逻辑运算
>>> a>3
array([False, False, False, True], dtype=bool)
将a中结果挨个与3比较大小,得出结果
3.指数计算
>>> a**3
array([ 1, 8, 27, 64])
4.矩阵相乘和矩阵点乘
矩阵相乘就是对应元素相乘的结果
>>> A=np.array([1,2])
>>> B=np.array([3,4])
>>> A*B
array([3, 8])
矩阵点乘
就是线代里面的矩阵乘法:
>>> A.dot(B)
11
4.sum.min,max
>>> a=np.array([1,2,3,4])
>>> a
array([1, 2, 3, 4])
>>> a.sum()
10
>>> a.max()
4
>>> a.min()
1
>>> b=a.reshape(2,2)
>>> b
array([[1, 2],
[3, 4]])
>>> b.sum(axis=0)
array([4, 6])
b.sum(axis=0)表示对每行的对应元素进行求和