• python numpy模块使用笔记(更新)


    np.arange(int a)

    生成一个一维array,元素个数是a个,元素是0到a-1

    注意arange不能直接生成多维array

    np.arange(int a).reshape(int b,int c)

    生成一个一维array,个数为a,然后改成二维数组b*c,b*c=a;也可更多维

    reshape与原shape无关,只要总元素个数符合即可

    reshape返回的对象实际是原array的一个引用,仅形式不一样,改变一个,两个都会变

    np.arange(int a, dtype=np.uint8)

    生成一个类型为np.uint8(或其他参数)的一维数组,个数为a

    np.arange(a,b)

    生成一个array,从a开始,到b以内,间隔为1,浮点数则间隔为1.0

    np.arange(a,b,c)

    生成一个array,从a开始,到b以内,间隔为c

    array的直接赋值不产生新的array

    np.zeros()构造一个全0.0的array

    np.ones()构造一个全1.0的array

    np.full( (tuple shape) , num ) 构造一个全为num的array,大小由shape规定

    np.eye( int d )构造一个d维(d*d)的单位矩阵array

     1 import numpy as np
     2 a = np.array([[1,2,3],[1,2]])
     3 print("a", a)
     4 b = a
     5 print("b is a? ", b is a)
     6 c = np.zeros((3,4))
     7 print("c", c)
     8 d = np.ones((3,4),dtype=np.int16)
     9 print("d", d)
    10 e = np.empty((3,4))
    11 print("e", e)
    12 f = np.arange(10.1,20.0)
    13 print("f", f)
    14 g = np.arange(12).reshape((3,4)).reshape((2,2,3))
    15 h = g.reshape((3,4))
    16 h[0][0] = 100
    17 print("h is g?", h is g)
    18 print(g)
    19 i = np.linspace(1,10,19)
    20 print("i", i)
    a [list([1, 2, 3]) list([1, 2])]
    b is a?  True
    c [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    d [[1 1 1 1]
     [1 1 1 1]
     [1 1 1 1]]
    e [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    f [10.1 11.1 12.1 13.1 14.1 15.1 16.1 17.1 18.1 19.1]
    h is g? False
    [[[100   1   2]
      [  3   4   5]]
    
     [[  6   7   8]
      [  9  10  11]]]
    i [ 1.   1.5  2.   2.5  3.   3.5  4.   4.5  5.   5.5  6.   6.5  7.   7.5
      8.   8.5  9.   9.5 10. ]


    np.array(list l)

    用list类型的对象l生成一个新的array

    np.array(ndarray l)

    用ndarray类型的对象l生成一个新的array

    np.asarray(list l)

    用list类型的对象l生成一个新的array

    np.asarray(ndarray l)

    用ndarray类型的对象l生成一个array,但两者是同一个对象

     1 a = [0,1,2]
     2 b = np.arange(3)
     3 c = np.array(a)
     4 d = np.array(b)
     5 e = np.asarray(a)
     6 f = np.asarray(b)
     7 a[0] = 1
     8 b[0] = 1
     9 print(c,d)
    10 print(e,f)
    11 print("f is b?", f is b)
    [0 1 2] [0 1 2]
    [0 1 2] [1 1 2]
    f is b? True


    a.copy()将a的值copy出来,生成一个新对象

    1 a = np.ones((1,3))
    2 b = a.copy()
    3 b[0][0] = 0
    4 print(a,b)
    [[1. 1. 1.]] [[0. 1. 1.]]


    a.ndim

    维数

    a.shape

    形状,几乘几乘几的array

    a.size

    元素个数

    a.dtype

    元素类型

    1 print(a.ndim)
    2 print(a.shape)
    3 print(a.size)
    4 print(a.dtype)
    5 print(type(a))
    2
    (2, 3)
    6
    float64
    <class 'numpy.ndarray'>


    基本运算都是对于array内的元素的运算

    运算,+-*&|^等二元运算符运用于两个shape相同的array间,结果是对应位置的元素分别运算

    幂次**等运算符结果是每个元素分别进行幂运算

    比较运算同样是对每个元素进行操作

    np.sin(ndarray a)

    np.cos(ndarray a)

    np.tan(ndarray a)

    1 a = np.arange(2,5)
    2 b = np.arange(1,4)
    3 print(a,b)
    4 print(a+b,a-b,a*b,a/b,a&b,a|b,a^b)
    5 print(a**3)
    6 print(a<b,a<3)
    7 print(np.sin(a))
    [2 3 4] [1 2 3]
    [3 5 7] [1 1 1] [ 2  6 12] [2.         1.5        1.33333333] [0 2 0] [3 3 7] [3 1 7]
    [ 8 27 64]
    [False False False] [ True False False]
    [ 0.90929743  0.14112001 -0.7568025 ]


    np.dot(ndarray a,ndarray b)

    a.dot(ndarray b)

    对于一维array,效果同向量点积,需满足长度相等

    对于高维array,效果为矩阵乘法,需满足矩乘要求

    a.transpose()或a.T矩阵转置,对一维array无效

    1 a = np.arange(0,6)
    2 print("1: ", a,a.T)
    3 print("2: ", a.dot(a))
    4 a = a.reshape((2,3))
    5 print("3: ", a)
    6 print("4: ", a.T)
    7 print("5: ", a.transpose())
    8 print("6: ", a.dot(a.T))
    9 print("7: ", a.T.dot(a))
    1:  [0 1 2 3 4 5] [0 1 2 3 4 5]
    2:  55
    3:  [[0 1 2]
     [3 4 5]]
    4:  [[0 3]
     [1 4]
     [2 5]]
    5:  [[0 3]
     [1 4]
     [2 5]]
    6:  [[ 5 14]
     [14 50]]
    7:  [[ 9 12 15]
     [12 17 22]
     [15 22 29]]


    np.random.random(shape)根据shape随机生成array,元素在0到1间

    np.median(ndarray a[, axis=0])中位数

    np.average(ndarray a[, axis=0])均值

    np.diff(ndarray a[, axis=0])差分

    a.max([axis=0])

    a.min([axis=0])

    a.sum([axis=0])

    a.cumsum([axis=0])前缀和

    a.mean([axis=0])求均值

    a.argmax([axis=0])这个函数应该是对于值相同的情况取其中的第一个

    np.sort(ndarray a[, axis=0])排序,默认按最高维排序

    np.sqrt(ndarray a)对每个元素分别开方

    定义axis则对于某一维进行分别运算

     1 a = np.random.random((2,5))
     2 print("a", a)
     3 print("sum", a.sum())
     4 print("cumsum 1", a.cumsum())
     5 print("cumsum 2", a.cumsum(axis=0))
     6 print("diff", np.diff(a))
     7 print("argmax", a.argmax(axis=0))
     8 print("max", a.max(axis=1))
     9 print("mean", a.mean(axis=1))
    10 print("median", np.median(a,axis=1))
    11 print("sort", np.sort(a,axis=0))
    a [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077]
     [0.79646881 0.30153261 0.06144976 0.46015996 0.61220888]]
    sum 4.463890979638066
    cumsum 1 [0.17921251 0.74507874 1.21644692 1.31848019 2.23207096 3.02853977
     3.33007238 3.39152214 3.8516821  4.46389098]
    cumsum 2 [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077]
     [0.97568132 0.86739883 0.53281794 0.56219323 1.52579964]]
    diff [[ 0.38665372 -0.09449805 -0.36933491  0.81155749]
     [-0.49493621 -0.24008284  0.3987102   0.15204892]]
    argmax [1 0 0 1 0]
    max [0.91359077 0.79646881]
    mean [0.44641419 0.446364  ]
    median [0.47136818 0.46015996]
    sort [[0.17921251 0.30153261 0.06144976 0.10203327 0.61220888]
     [0.79646881 0.56586623 0.47136818 0.46015996 0.91359077]]


    a.nonzero()输出所有非零元素的下标,输出结果为一个tuple,共维数个array,表示所有元素的每一维下标

    a.clip(min,max)将小于min值的设为min值,大于max值的设为max值,返回为新的array

    1 a = np.arange(0,16).reshape((2,2,2,2))
    2 print(a)
    3 print(a.nonzero())
    4 print(np.zeros(10).nonzero())
    [[[[ 0  1]
       [ 2  3]]
    
      [[ 4  5]
       [ 6  7]]]
    
    
     [[[ 8  9]
       [10 11]]
    
      [[12 13]
       [14 15]]]]
    (array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64), array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], dtype=int64), array([0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int64), array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=int64))
    (array([], dtype=int64),)
    1 a = np.random.random((2,5))
    2 print(a)
    3 print(a.clip(0.25,0.75))
    [[0.13959892 0.82723864 0.46736009 0.81501597 0.73909778]
     [0.93349076 0.46512676 0.49638509 0.81460657 0.98483514]]
    [[0.25       0.75       0.46736009 0.75       0.73909778]
     [0.75       0.46512676 0.49638509 0.75       0.75      ]]


    a.flatten()将a所有元素列成一个一维array

    a.flat a的迭代器

    1 a = np.arange(0,6).reshape((2,3))
    2 print(a)
    3 print(a.flatten())
    4 for item in a.flat:
    5     print(item)
    [[0 1 2]
     [3 4 5]]
    [0 1 2 3 4 5]
    0
    1
    2
    3
    4
    5

    a[np.newaxis]将原对象作为一个元素放进一个array里,即在最外面加了一维

    a[:[,:],np.newaxis]按照np.newaxis之前的切片表示的遍历最小元素,将每个元素放进一个array

    这种操作都没有产生新的对象

     1 a = np.arange(0,6)
     2 print(a[np.newaxis])
     3 print(a[:,np.newaxis])
     4 a[np.newaxis][0][1] = 0
     5 print(a)
     6 print("a[np.newaxis][0][1] is a?",a[np.newaxis][0][1] is a)
     7 b = np.arange(0,6).reshape((2,3))
     8 print("1: ", b[np.newaxis])
     9 print("2: ", b[:,np.newaxis])
    10 print("3: ", b[:,:,np.newaxis])
    [[0 1 2 3 4 5]]
    [[0]
     [1]
     [2]
     [3]
     [4]
     [5]]
    [0 0 2 3 4 5]
    a[np.newaxis][0][1] is a? False
    1:  [[[0 1 2]
      [3 4 5]]]
    2:  [[[0 1 2]]
    
     [[3 4 5]]]
    3:  [[[0]
      [1]
      [2]]
    
     [[3]
      [4]
      [5]]]

    np.vstack(ndarray a, ndarray b[,...])将a、b整体进行连接,合成一个ndarray,要求a和b除第一维外其余维一样,合并后得到的第一维为a、b的第一维相加,第二维shape不变

    np.hstack(ndarray a, ndarray b[,...])将a、b的每一个第一维元素进行连接,合成一个ndarray,要求第二维外其余维一样,合并后第二维为a、b的第二维相加,其余维不变

    np.concatenate((ndarray a, ndarray b[,...]),axis=0)可以自由定义以第几维进行连接,除指定维外其余维一样

    对于一维array,运算时当做1*n的array进行连接,运算完h连接会产生1*2n的array,仍变成一维的长2n的array,而v连接产生2*n的array

    连接操作均返回新的对象

     1 a = np.arange(0,6).reshape((2,3))
     2 b = np.arange(6,12).reshape((2,3))
     3 print("a: ", a)
     4 print("b: ", b)
     5 print("vab: ", np.vstack((a,b)))
     6 print("hab: ", np.hstack((a,b)))
     7 print(a.shape,b.shape,np.vstack((a,b)).shape)
     8 print(a.shape,b.shape,np.hstack((a,b)).shape)
     9 a = np.arange(0,6)
    10 b = np.arange(6,12)
    11 print("a: ", a)
    12 print("b: ", b)
    13 print("vab: ", np.vstack((a,b)))
    14 print("hab: ", np.hstack((a,b)))
    15 print(a.shape,b.shape,np.vstack((a,b)).shape)
    16 print(a.shape,b.shape,np.hstack((a,b)).shape)
    17 a = np.arange(0,6).reshape((1,6))
    18 b = np.arange(6,12).reshape((1,6))
    19 print("a: ", a)
    20 print("b: ", b)
    21 print("vab: ", np.vstack((a,b)))
    22 print("hab: ", np.hstack((a,b)))
    23 print(a.shape,b.shape,np.vstack((a,b)).shape)
    24 print(a.shape,b.shape,np.hstack((a,b)).shape)
    a:  [[0 1 2]
     [3 4 5]]
    b:  [[ 6  7  8]
     [ 9 10 11]]
    vab:  [[ 0  1  2]
     [ 3  4  5]
     [ 6  7  8]
     [ 9 10 11]]
    hab:  [[ 0  1  2  6  7  8]
     [ 3  4  5  9 10 11]]
    (2, 3) (2, 3) (4, 3)
    (2, 3) (2, 3) (2, 6)
    a:  [0 1 2 3 4 5]
    b:  [ 6  7  8  9 10 11]
    vab:  [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]]
    hab:  [ 0  1  2  3  4  5  6  7  8  9 10 11]
    (6,) (6,) (2, 6)
    (6,) (6,) (12,)
    a:  [[0 1 2 3 4 5]]
    b:  [[ 6  7  8  9 10 11]]
    vab:  [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]]
    hab:  [[ 0  1  2  3  4  5  6  7  8  9 10 11]]
    (1, 6) (1, 6) (2, 6)
    (1, 6) (1, 6) (1, 12)
     1 a = np.arange(0,6).reshape((2,3))
     2 b = np.arange(6,10).reshape((2,2))
     3 print("a: ", a)
     4 print("b: ", b)
     5 print("hab: ", np.hstack((a,b)))
     6 print(a.shape,b.shape,np.hstack((a,b)).shape)
     7 a = np.arange(0,6).reshape((3,2))
     8 b = np.arange(6,10).reshape((2,2))
     9 print("a: ", a)
    10 print("b: ", b)
    11 print("vab: ", np.vstack((a,b)))
    12 print(a.shape,b.shape,np.vstack((a,b)).shape)
    13 a = np.arange(0,12).reshape((2,2,3))
    14 b = np.arange(12,20).reshape((2,2,2))
    15 print("a: ", a)
    16 print("b: ", b)
    17 print("cab-2: ", np.concatenate((a,b),axis=2))
    18 print(a.shape,b.shape,np.concatenate((a,b),axis=2).shape)
    a:  [[0 1 2]
     [3 4 5]]
    b:  [[6 7]
     [8 9]]
    hab:  [[0 1 2 6 7]
     [3 4 5 8 9]]
    (2, 3) (2, 2) (2, 5)
    a:  [[0 1]
     [2 3]
     [4 5]]
    b:  [[6 7]
     [8 9]]
    vab:  [[0 1]
     [2 3]
     [4 5]
     [6 7]
     [8 9]]
    (3, 2) (2, 2) (5, 2)
    a:  [[[ 0  1  2]
      [ 3  4  5]]
    
     [[ 6  7  8]
      [ 9 10 11]]]
    b:  [[[12 13]
      [14 15]]
    
     [[16 17]
      [18 19]]]
    cab-2:  [[[ 0  1  2 12 13]
      [ 3  4  5 14 15]]
    
     [[ 6  7  8 16 17]
      [ 9 10 11 18 19]]]
    (2, 2, 3) (2, 2, 2) (2, 2, 5)
    1 a = np.arange(0,6)
    2 b = np.arange(6,12)
    3 np.hstack((a,b))[0] = 100
    4 np.hstack((a,b))[6] = 100
    5 print(a)
    6 print(b)
    [0 1 2 3 4 5]
    [ 6  7  8  9 10 11]

    np.vsplit(ndarray a, b)将a对第一维进行拆分成b等份

    np.hsplit(ndarray a, b)将a对第二维进行拆分成b等份

    np.split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b等份

    np.array_split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b份,允许不等分,此时会尽量均等,多出部分从前到后分配

    1 a = np.arange(6).reshape((2,3))
    2 print(a)
    3 print(np.vsplit(a,2))
    4 print(np.hsplit(a,3))
    5 print(np.split(a,2,axis=0))
    6 print(np.split(a,3,axis=1))
    7 print(np.array_split(a,2,axis=1))
    [[0 1 2]
     [3 4 5]]
    [array([[0, 1, 2]]), array([[3, 4, 5]])]
    [array([[0],
           [3]]), array([[1],
           [4]]), array([[2],
           [5]])]
    [array([[0, 1, 2]]), array([[3, 4, 5]])]
    [array([[0],
           [3]]), array([[1],
           [4]]), array([[2],
           [5]])]
    [array([[0, 1],
           [3, 4]]), array([[2],
           [5]])]

    np.empty_like( array x ):返回一个大小和类型与x相同的array,但其中内容并未初始化,可能为随机值

    np.zeros_like( array x ):返回一个大小与x相同,但元素全为 0 的array

    np.ones_like( array x ):返回一个大小与x相同,但元素全为 1 的array

    np.tile( array x, tuple shape):返回一个大小为 x 的维分别于 shape 的维相乘的 array,即将 x copy了 shape遍。

  • 相关阅读:
    Solaris下批量kill掉oracle的session
    我写blog的方式变迁
    filezilla ftp client在win7 下获取ftp目录信息出错解决方法
    GNU System Monitor编译问题
    在vmware的Solaris虚拟机中安装vmtool
    关于golden gate director client的一点点使用总结
    测试 乱弹
    ORM的世界 (再补充)
    Yahoo Konfabulator
    轻量容器和注射依赖 的自实现
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/8859687.html
Copyright © 2020-2023  润新知