Numpy 基础使用

1. 属性

    array = np.array([[1,2,3],[2,3,4]])   #列表转化为矩阵
    array.ndim   # 维度
    array.shape   # 行数和列数
    array.size   # 元素个数
    array.size   # 数据类型

2. 定义矩阵

    np.zeros((3,4))
    np.ones((3,4),dtype = np.int)
    np.empty((3,4))     # 生成的数据几乎接近为0
    np.arange(10,20,2)      # 10-19 的数据,2步长   左闭右开
    np.arange(12).reshape(3,4)      # 3行4列,0到11
    a = np.linspace(1,10,20)      # 从1到10,生成20个数据,19个等长线段 

3. 运算

    a+b   # a、b有相同的shape
    a-b
    a**2    # 几次幂
    np.sin(a)     # a是角度,可以通过a*np.pi/180来转化为弧度
print(a<10)    # 不管a的shape如何,始终返回一个bool列表
    a*b                # 对应元素相乘
    np.dot(a, b)    or   a.dot(b)                # 矩阵相乘
    np.sum(a, axis=0)
    np.min( )     np.max( )       # 最大值和最小值
 
    np.argmin( )   np.argmax( )    # 最大值和最小值的索引
    np.mean( )  np.average( )   # 求平均
    np.median( )    # 中位数
    np.cumsum( )     # 累加函数
    np.diff( )     # 累差函数
    np.nonzero( )     # 非零元素的坐标,各个维度单独返回一个array
    np.sort( )     # 排序,可以指定axis
    np.transpose( A )   or  A.T    # A的转置,比如A的shape是(2,3,2,4),转置过后变为(4,2,3,2)
    np.clip( A, 5, 9 )    # 类似于过滤器,比9大的元素都替换成9,比5小的元素都替换成5

4. 索引、修改维度

    一维: A[0]
    二维: A[1][0]   or  A[1, 0] 
    可以利用 : 对一定范围内的元素进行切片操作,例如A[1, 1:3]返回第一行,1-2列的元素(左闭右开)
    for item in A:  # 迭代最外层的元素
    for item in A.flat:    # flat迭代器
    A.flatten()    # 降为1维,返回的是拷贝,对拷贝的修改不影响原始矩阵
    A.ravel()    # 降为1维,返回的是视图,相当于把原array压成一维,在视图上的修改就是直接在原array上的修改
    A.reshape(-1)   # 降为1维
    np.squeeze(A, axis)     # 删除A中维度为1的条目,如(1, 2, 3, 1)squeeze过后变为(2, 3),可以指定某一维,若指定的维度不是1会报错

5. 合并和分割

   np.vstack((a,b,...))     # vertical 上下连接(最外层的维度上)
    np.hstack((a,b,...))     # horizontal 左右连接  (第二个维度上)
    A[:,np.newaxis]     # 增加一个维度,使用上和None一样
    np.concatenate((a,b,…), axis)   # 指定维度上进行连接
    
    np.split(A, 整数or数组, axis)     # 沿axis轴分割数组,整数必须保证能均分,不然会报错。数组[3,5,7]表示在第3,5,7行进行切割
    np.array_split     # 和上面一样,不过整数可以不用保证均分
    np.vsplit(A, 整数or数组)     # 水平分割  等价于split在axis=0上分割
    np.hsplit(A, 整数or数组)       # 垂直分割  等价于split在axis=1上分割    

6. 拷贝

    b=a   # 无复制
    b=a[ : ]  和  b=a.view( )     # 创建视图(浅拷贝),即新建了一个数组对象,改变b的维度不会影响a的维度,但是b并没有拷贝一份a的数据,他们的数据是存放在同一块内存里的
    b=a.copy( )     # 副本(深拷贝),b单独拷贝了一份a的数据,两者完全隔离互不影响
posted @ 2021-06-15 17:23  deeojunkie  阅读(42)  评论(0编辑  收藏  举报