Numpy库学习

Numpy库学习

  记录numpy库ndarray数据结构的定义和使用方法,np库常用函数。

数组数据

Numpy库学习_第1张图片
属性

a = np.array([[1,2,3],[4,5,6]])
np.ndim(a)  => 2       秩:轴的数量
np.shape(a)  => (2,3)  23列  axis0=2,axis1=3
np.size(a)  => 6       元素个数2*3 
a.itemsize  => 4       元素字节,int类型

数组创建

(1) 从python列表、元组中创建
x = np.array(list/tuple,dtype=数据类型)

a = [1,2,3]
a = (1,2,3)
x = np.array(a)

(2) 通过函数创建
np.arange(n)0到n-1的数组
   常用 np.arange(k).reshape((m,n))

np.ones((2,3))               23列全1数组
   zeros((2,3))0
   full((2,3),5)          23列,全为5的数组
   eye(n)                    n阶单位矩阵
   
np.one_like(a)            和a形状一样的全1数组
   zeros_like(a)0 
   full_like(a,val)    和a形状一样的全为val的数组

np.linspace(start,stop,steps)       等间距生成
   np.linspace(1,4,4) => array([1,2,3])
np.concatenate((a1,a2,a3),axis=0)    数组合并
   数组合并时的轴axis必须在a中存在,比如一维只有轴0,就无法使用axis=1 来合并

数组变形

a = np.arange(8)

'''原数组a不变,新生成一个数组返回'''
x = a.reshape((2,4)) (x)=> array([[0, 1, 2, 3],
                               [4, 5, 6, 7]])
a.resize((2,4))  原数组变了

'''维度调换,改变原数组 
取axis0的第1,2,...,n组的axis1的第一个元素作为axis0新的第一个元素'''
x.swapaxes(1,0) => array([[0, 4],   
                          [1, 5],
                          [2, 6],
                          [3, 7]])

b = x.flatten()      降成一维,原数组不变
b = x.astype(float)  改变类型,原数组不变
b = x.tolist()       变成列表,原数组不变

数组索引和切片

a = np.arange(4) => array([0, 1, 2, 3])

a[2] => 20开始索引
a[1:4:2]  => array([1, 3])   从a[1](包括)->a[4](不包括),间隔2
a[:] 	该维度所有数据,表示不关心这个维度
a[::2] => array([0, 2])     从该维度第0个数据开始,步长为2切片
a[-1] => 3  倒数第一个数
a[-2] => 2  倒数第二个数

'''获取下标'''
x = np.arange(6).reshape((2,3))
index = np.array(np.where(x==2)).flatten()
index => array([0, 2], dtype=int64)

数组运算

各元素的简单运算

x (+ - * / **) y      对应元素进行运算
np.abs(x)/np.fabs(x)  求元素绝对值,fabs是将元素变为float类型,abs不改变类型
np.sqrt(x)    开方
np.square(x)  平方

np.log(x) np.log2(x) np.log10(x)
np.cos(x) np.exp(x)  np.sign(x)

np.ceil(x)    上取整
np.floor(x)   下取整
x.clip(0,255) 设置范围
np.rint(x)    四舍五入
a,b = np.modf(x)  (小数,整数)独立返回

np.maximun(x,y) np.fmax(x,y)  取x,y同位置最大值生成数组,fmax忽略NAN
np.mininum(x,y)  取小的
np.mod(x,y)      取余
np.copysign(x,y) x的值,y的符号

数学矩阵计算

np.dot(x,y)       矩阵乘法
x.T               求转置
np.linalg.inv(x)  求逆

整个数组的统计运算

np.sum(x,axis=0)   0维求和,不加axis就是整个矩阵求和
np.mean(x,axis=0)  均值
np.average(x,axis=0,weight=np.array(a))  加权求和,等价于np.sum(x*a)/np.sum(a)
np.std(x,axis=0)  标准差
np.var(x,axis=0)  方差
np.median(x)      中位数

np.max(x) np.min(x) 
np.ptp(x)  最大最小值之差

np.argmax(x) np.argmin(x)  得到下标,一维后的位置
np.unravel_index(np.argmax(a),a.shape)  转回高维后的位置

np.gradient(x)  梯度函数
    有三个数 a b c: b处梯度(c-a)/2
    有两个数 a b  : a、b处梯度b-a
    多维数组,会返回一个梯度数组
x = np.arange(6).reshape(2,3)
np.gradient(x)
=>  [array([[3., 3., 3.],
        [3., 3., 3.]]),
    array([[1., 1., 1.],
            [1., 1., 1.]])]

数组随机数生成(random子库)

np.random.rand(2,3) => array([[0.48597334, 0.8402317 , 0.8127727 ],
                              [0.88309114, 0.7980546 , 0.42271826]]) # 均匀分布
np.random.randn(2,3)  标准正态分布
np.random.randint(low,high,shape)  随机产生low-high的整数数组
np.random.seed(n)  随机数种子

np.random.uniform(low,high,shape)  low - high 均匀分布
np.random.normal(mu,sigma,shape)   正态分布
np.random.poisson(lamda,shape)     泊松分布

np.random.shuffle(a)  按第0轴随机排序,打乱,改a
x = np.random.permutation(a)  不改a

np.random.choice(a,shape,replace=Ture,p)  在a中抽元素组成新数组
   '''
   a:一维
   p:对应a,是a中各元素抽到的概率
   shape:生成的数组大小
   replace=Ture:a中元素可重复使用
   '''

csv文件存储

一、二维存取

np.savetxt(frame,array,fmt,delimiter=None)
   '''
   frame:文件名字符串 "mywork.csv"
   array:数组
   fmt:格式 '%d'(十进制),'%.2f(小数点后两位)','%.18e(科学计数法)'
   delimiter:分隔符
   '''
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
   unpack:读入属性分别写入不同变量

你可能感兴趣的:(机器学习,numpy,python,机器学习)