zoukankan      html  css  js  c++  java
  • 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遍。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 数的统计
    Java实现 蓝桥杯VIP 算法训练 和为T
    Java实现 蓝桥杯VIP 算法训练 友好数
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 暗恋
    Java实现 蓝桥杯VIP 算法训练 暗恋
    测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
    RichEdit 各个版本介绍
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/8859687.html
Copyright © 2011-2022 走看看