NumPy使用的一种矩阵式数据结构管理数据,比Python的list和标准库的array更加强大,使用简便。此篇简单归纳逼逼叨Numpy入门,持续补充。。。。
1.Numpy Reference documentation:
Interactive help: numpy.array?
Looking for something: numpy.lookfor('create array')
2.Create arrays
b =np.array([[0,1, 2],[3, 4, 5]]) # 2 x 3 array
b.ndim获取b的dimension
b.shape 输出 (2,3) 表示 2*3 array
len(b) 输出 2 返还array的第一个维度的大小
3.Functions for creating arrays
numpy.arange(a, b, c) : a 起始值 b 终止值 c 步长
numpy.linspace(a ,b , c): a 起始值 b 终止值 c 元素个数
arange 和linspace都是创建等距数列,且都指定起始和终止值,但一个指定步长,linspace等距划分指定个数
numpy.ones ( (i , j) ) , numpy.zeros ( ( i, j) ) 创建 i*j 且元素全部为0或1的阵列
numpy.random.rand(4) : # uniform in [0 , 1]
array([ 0.95799151, 0.14222247, 0.08777354, 0.51887998])
4.Indexing and slicing
注意:在二维矩阵里,第一维对应行,第二维对应列
Slicing: 对矩阵分割切片
numpy.arange(10) [2 , 9, 3] # [ start : end : step ]
默认情况下,起始0,终止最后一个,步长为1
4.Copies and views
a = np.arange(10) ,b = a 则这两个数列共享同一段内存,用numpy.may_share_memory(a,b)即可检测,而用 c = a.copy() 则只 是将数据赋值过去,并不共享内存。所以修改b的数据,共享内存的a也会一并修改,而c不受影响。
5.Fancy indexing
a=numpy.arange(10)
( a% 3 == 0) 则输出bool型array判断是否符合
若要输出对应符合条件元素:
- mask=(a%3==0)
- extract_from_a=a[mask]
- extract_from_a
修改符合条件元素: a [a % 3 == 0] = -1
indexing with an array of integers
6. Other operations
Array a , b 进行比较,同等维度,且size一样:
a==b, a>b , np.array_equal( a, b) 返还array 的 dtype = bool
还能进行与和或比较:
np.logical_or(a, b) np.logical_and(a, b)
Transcendental functions:
np.sin(a) np.log(a) np.exp(a)
Transposition: a.T进行矩阵转置
7.Basic reductions
计算和: x = np.array( [ [1, 1], [2, 2] ])
sum by rows and colums: x.sum(axis=0) x[ : , 0].sum() x[ : , 1].sum() 即可通过索引 indexing方式计算和sum()
Other reductions: 寻找array x中的特殊值
x.min() x.max() x.argmin() x.argmax() x.mean() x.median() 注意:括号中可添加索引indexing,例如numpy.median(y,axis=1)
numpy.all() numpy.any() 括号中为判断条件或者bool型值,all为判断是否括号中所有条件为真,而any判断括号中是否存在真值
例如:numpy.all ( [ True, True, False ] ) numpy.any ( [ False, False, True] )
numpy.tile(a, k) tile函数能将array a 复制k组
Array shape manipulation :
将array a转变成一维数组使用函数 a.ravel(), 重新转成 i*j 的矩阵使用函数 a. reshape ( ( i*j ) )
和 reshape() 函数有着类似功能的是 transpose(), 能够改变矩阵的维度
a.resize() 能够改变矩阵某一围度的size,但是注意矩阵a不能被引用,例如 b = a, 因为共享内存,resize()函数无法同时修改 b 占用的内存
sort()函数可以对矩阵里的元素大小进行排序,可以使用 numpy.sort() 或者 a.sort()