毕设的程序设计中使用了python来处理数据,主要使用的是numpy包,网上大部分对numpy进行介绍的教程比较老旧,想要使用的功能不太容易找到。因此,写这篇文章来对现有的一些资源就行整理,当然想要更全面的了解numpy的使用还是从访问官方手册开始。
win下
pip isntall numpy
当然最好还是直接安装pythonxy或者Anaconda的集成包。
import numpy as np
a=np.array([1,2,3,4])
由a.shape
可知结果为(4,)
,说明a是一个列向量
而a=([[1,2,3,4]])
是一个横向量 ;
c=np.array([[1, 2, 3, 4],[4, 5, 6, 7],[7, 5, 6, 8]])
对c的shape属性赋值可以改变数组的形状。c.shape=4,3 就是将这个3*4的数组变为4*3的数组;结果是:array([[1, 2, 3],[4, 4, 5],[6, 7, 7],[5, 6, 8]])
。当你懒得算有计算每一排有几个的时候可以这样写:c.shape=4,-1
,这样的效果也是一样的,-1可以用来代替一个具体值。但是在不能均分的情况下就会报错。
d=c.reshape
是在不改变原来数据的情况下实现对数据的变形,也可以实现上述的4*3数组变为3*4的数组功能,d=c.reshape((3,4))
;
type(c)
查看c的数据类型,c.dtype
查看c里面的数据的类型;所以也可以在定义的时候就定下数据类型, b=np.array([1.2,2,2,3.1],dtype=np.int)
,结果是array([1, 2, 2, 3])
。
arange()
相当于函数range()
,指定开始值,终值,步长来创建一维数组。注意 不包括终值 ,例如: b=np.arange(0,1,0.2) ,结果是:array([ 0. , 0.2, 0.4, 0.6, 0.8]) 。但是linspace()
却是要包括终值的。他是指定开始值,终值,数据个数来创建一维数组。例如: b=np.linspace(1,9,10)
,就是要将1到9之间均分为9份,结果是:array([ 1. , 1.88888889, 2.77777778, 3.66666667, 4.55555556,5.44444444, 6.33333333, 7.22222222, 8.11111111, 9. ])
。
zeros()
,ones()
,empty()
都是按照指定的形状生成相应的数组。例如: np.ones((2,3))
,结果就是 array([[ 1., 1., 1.], [ 1., 1., 1.]])
np.zeros((3,4),dtype=np.float)
,结果就是array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.],[ 0., 0., 0., 0.]])
。唯一不同的是 np.empty((5,2))
,结果为array([[ 2.43631958e-266, 0.00000000e+000], [ 0.00000000e+000, 0.00000000e+000],[ 0.00000000e+000, 0.00000000e+000], [ 0.00000000e+000, 0.00000000e+000], [ 0.00000000e+000, 0.00000000e+000]])
, 里面不是数据,而是给数据分配的空间地址。
切片 a=np.arange(0,10,1)
,我们可以使用a[3:7]
,表示a[3]
到a[6]
的所有元素组成的数组array([3, 4, 5, 6])
;还可以在其中加上步长,但都 不包括最后一个元素。而a[:-1]
,其中 含有负数就表示从后面开始;若是步长为负数,表示倒序排列 ,如:a[7:1:-1]
结果是array([7, 6, 5, 4, 3, 2])
。
通过整数列表获得元素组成新的数组:a[[1,2,2,3,5]]
。 取出a中的元素构成新的数组,结果是array([1, 2, 2, 3, 5])
;下标也可是负数;
np.random.rand(10)
产生数值为0~1的随机数组;
记住这个例子:
>>> a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6)
>>> a
array([[ 0, 1, 2, 3, 4, 5],
[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[30, 31, 32, 33, 34, 35],
[40, 41, 42, 43, 44, 45],
[50, 51, 52, 53, 54, 55]])
其中a[3,3:6]
表示第4行的第4到6列,结果是array([33, 34, 35])
;
a[:2]
表示前两列:
array([[ 0, 1, 2, 3, 4, 5],[10, 11, 12, 13, 14, 15]])
;
而a[:,2]
表示第3列,array([ 2, 12, 22, 32, 42, 52])
;
a[1::,::2]
表示的是
array([[10, 12, 14],[20, 22, 24],[30, 32, 34],[40, 42, 44],[50, 52, 54]])
,即从第二行开始,选取每行中的元素,步进为2。