1 数组对象
创建数组
import numpy as np a = np.arange(10) b = np.arange(2,10,1) #[2,10)步长为1 c = np.linspace(0,10,20) #[0,10]共20个 d = np.array([range(5)]) #用list/tuple创建数组
快速生成x*y的全零数组
a = np.zeros((3,4))
0~1的随机数
a = np.random.rand(5)
一维数组转化为二维数组
a = np.arange(20)
a = a.reshape(4,5)
ps:使用reshape(-1,5)得到一样的结果,会根据列自动适应行
构造更高维的
a = a.reshape(2,2,5)
二维数组转化为一维数组
a = np.array([[1,2,3],[4,5,6]])
a = np.ravel(a)
查看数组属性
a.ndim查看维度,a.shape查看各维度大小,a.size查看元素个数,a.dtype查看元素类型
数组切割vsplit()和hsplit()
vsplit()来进行分行,而hsplit分列,np.vsplit(arr,indices)
a = np.arange(18).reshape(-1,3) print a print np.vsplit(a,3) print np.hsplit(a,3)
输出为
array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11], [12, 13, 14], [15, 16, 17]]) [array([[0, 1, 2], [3, 4, 5]]), array([[ 6, 7, 8], [ 9, 10, 11]]), array([[12, 13, 14], [15, 16, 17]])] [array([[ 0], [ 3], [ 6], [ 9], [12], [15]]), array([[ 1], [ 4], [ 7], [10], [13], [16]]), array([[ 2], [ 5], [ 8], [11], [14], [17]])]
按指定位置切分
将第二个参数改为list,来指定切分的位置
print np.vsplit(1,4) #以第1和第4行进行切分
数组操作
1) ‘+’,’-’,’*’,’/’ 加减乘除
2)开根号、指数操作
a = np.array([1,2]) print np.array(a) print np.sqrt(a) print np.exp(a) print np.square(a) print np.power(a,5) print a**5 #和np.power(a,5)效果一样
3)最大最小值
a.min() a.max() a.sum() a.min(axis=0) #minimun element in each column a.min(axis=1) #minimun element in each row a.max(axis=0) a.max(axis=1)
4)数组均值、中位数
np.mean(a)
np.median(a)
数组取值
1)可以直接使用下标取值,直接赋值为浅拷贝(b=a,为b指向了a的内存地址),要真正拷贝,使用copy
a = np.array([[1,2],[3,4]]) b = a c = a.copy() print a[0][0], b[0][0], c[0][0] #1 1 1 b[0][0] = 5 print a[0][0], b[0][0], c[0][0] # 5 5 1
2)利用’:’可以访问某一维的全部数据
a = np.arange(20).reshape(4, 5) print a[:,[1,3]] #取出a的每一行的第2到4个元素
数组拼接
a = np.array([1,2,3]) b = np.array([4,5,6]) c = np.hstack([a,b]) #[1, 2, 3, 4, 5, 6] d = np.vstack([a,b]) #[[1, 2, 3], # [4, 5, 6]]
二 矩阵对象
创建矩阵
矩阵是二维的,而数组的可以是任意正整数维
a = np.arange(5) a = np.mat(a) #[[0, 1, 2, 3, 4]] b = np.mat('1 2;3 4') #[[1, 2], #[3, 4]]
矩阵乘法
矩阵的’*’操作符进行的是矩阵乘法,乘号左侧的矩阵列和乘号右侧的矩阵行要相等,而在数组中’*’操作符进行的是每一元素的对应相乘,乘号两侧的数组每一维大小需要一致
矩阵转置
a = np.array([[1, 2, 3], [4, 5, 6]]) print np.transpose(a) #数组用transpose print np.matrix(a).T #矩阵用T
矩阵求逆
a = np.mat('1.0 2.0;3.0 4.0') b = nlg.inv(a) print a*b #[[1.0000000e+00 0.0000000e+00] #[8.8817842e-16 1.0000000e+00]]
特征值与特征向量
eig_value, eig_vector = nlg.eig(a)
3 其他
缺失值处理
用nan作为缺失值,用isnan判定
a = np.random.rand(2,2) a[0, 1] = np.nan print np.isnan(a) #[[False True] # [False False]]
作者:huangqiancun
出处:http://www.cnblogs.com/huangqiancun/
本博客若无特殊说明则由作者原创发布,欢迎转载,但请注明出处 :)