zoukankan      html  css  js  c++  java
  • numpy-1.18.4

    一.简介

    1.主要用于科学计算,主要特点是ndarray数组

    2.http://www.numpy.org/

    3.https://numpy.org/doc/1.18/numpy-ref.pdf

    二.ndarray类

    1.简介:n维数组

    (1)相当于python中的容器对象(比如列表),执行效率更高(速度快),代码更少(内存小)

    (2)数组中的每个元素都需要具有相同的数据类型,内存分配的大小也相同

    (3)初始化创建时最好指明:数组中元素的类型(dtype),数组的大小(shape),用来创建数组的对象(比如列表或嵌套的多维表现形式)

    2.常用属性

    (1)dtype:元素类型,表现数据的存储方式和大小,比如float16、float32、float64、float、bool、complex、uint8、int32、int8、int16.....

    (2)shape:数组形状(元组形式),从外往内数一维数组元素的个数,比如【【【1,2,3】  【4,5,6】】 、    【【3,4,5】【2,4,5,】 】 、   【【3,4,5】【2,4,5,】 】 】:(3,2,3)最外层一维数组总有三个元素,每个元素中又有两个元素,这两个元素中每个又有三个元素。若是二维,则表示行数和列数,注意:维度是从外往内的、从1开始,对应axis=0,

    (3)T:转置

    (4)ndim:维度,shape元组的长度

     1 import numpy as np
     2 a = np.arange(15).reshape(3, 5)
     3 print(a)            # 显示数组
     4 print(type(a))      # 类型是ndarry(多维数组)
     5 print(a.shape)      # 数组形状,3行5列
     6 print(a.size)       # 数组的元素总数,3*5=15
     7 print(a.ndim)       # 数组轴数,2,从0开始即0,1,2
     8 print(a.dtype)      # 数组中元素的类型,int32
     9 
    10 print(a.itemsize)   # 数组中每个元素的大小(以字节为单位),32/8=4
    11 print(a.data)       # 包含数组实际元素的缓冲区,不常用
    12 print(a.flags)      # 对象的内存信息
    13 print(a.itemsize)   # 返回数组中每个元素的字节单位长度
    14 print(a.T)          # 转置
    15 ---------------------------------------------------------------
    16 [[ 0  1  2  3  4]
    17  [ 5  6  7  8  9]
    18  [10 11 12 13 14]]
    19 <class 'numpy.ndarray'>
    20 (3, 5)
    21 15
    22 2
    23 int32
    24 4
    25 <memory at 0x0000025EDCC1BA68>
    26   C_CONTIGUOUS : True
    27   F_CONTIGUOUS : False
    28   OWNDATA : False
    29   WRITEABLE : True
    30   ALIGNED : True
    31   WRITEBACKIFCOPY : False
    32   UPDATEIFCOPY : False
    33 
    34 4
    35 [[ 0  5 10]
    36  [ 1  6 11]
    37  [ 2  7 12]
    38  [ 3  8 13]
    39  [ 4  9 14]]
    属性

    3.常用方法

    (1)修改数组形状:

    【1】.reshape():改变数组形状,返回已修改的数组,但不更改原始数组,比如把(3,2)变成(2,3)

    【2】.ravel():返回所有元素的一维数组,从左到右,从上到下

    【3】.transpose:转置相当于.T

    【4】.swapaxes:维度交换,若ndarray是二维的,则就变成了转置

     1 ###########数组变化##############
     2 a = np.floor(10*np.random.random((3,4)))
     3 print(a)
     4 # 返回已修改的数组,但不更改原始数组
     5 print(a.reshape(4, 3))   # reshape方法改变数组的形状,
     6 print(a.reshape(3,-1))   # 尺寸指定为-1,则会自动计算其他尺寸
     7 print(a.ravel())         # 返回所有元素的一维数组,从左到右,从上到下
     8 print(a.transpose())     # 转置
     9 print(a.flatten())       # 扁平化
    10 print(a.swapaxes(0,1))   # 维度交换
    11 print(a)
    12 print('#'*30)
    13 print(a.resize((2, 6)))  # resize方法修改数组本身
    14 print(a)
    15 ------------------------------
    16 [[8. 8. 8. 2.]
    17  [3. 0. 5. 9.]
    18  [1. 1. 1. 8.]]
    19 [[8. 8. 8.]
    20  [2. 3. 0.]
    21  [5. 9. 1.]
    22  [1. 1. 8.]]
    23 [[8. 8. 8. 2.]
    24  [3. 0. 5. 9.]
    25  [1. 1. 1. 8.]]
    26 [8. 8. 8. 2. 3. 0. 5. 9. 1. 1. 1. 8.]
    27 [[8. 3. 1.]
    28  [8. 0. 1.]
    29  [8. 5. 1.]
    30  [2. 9. 8.]]
    31 [8. 8. 8. 2. 3. 0. 5. 9. 1. 1. 1. 8.]
    32 [[8. 3. 1.]
    33  [8. 0. 1.]
    34  [8. 5. 1.]
    35  [2. 9. 8.]]
    36 [[8. 8. 8. 2.]
    37  [3. 0. 5. 9.]
    38  [1. 1. 1. 8.]]
    39 ##############################
    40 None
    41 [[8. 8. 8. 2. 3. 0.]
    42  [5. 9. 1. 1. 1. 8.]]
    数组变换

    (2)一般方法

     1 # 一般方法#######################################################
     2 import numpy as np
     3 a = np.array([[1,2,3],[4,5,6],[2,4,5]])
     4 print(a.item(3))              # 相当于索引,一个值相当于扁平化的所有,返回标量
     5 print(a.item((1,2)))          # 相当于索引,相当于a[1,2],返回标量
     6 print(a.tolist())             # 转变为列表
     7 print(a.tostring())           # 转变为字符串
     8 print(a.tofile('c.txt'))      # 存储进文件
     9 print(a.astype('float32'))    # 转变元素类型
    10 print(a.copy())               # 复制,生成数组及其数据的完整副本,完全拷贝了父对象及其子对象,深拷贝id变了
    11 print(a.view(dtype=np.int8))  # 创建一个查看数据的新数组对象,浅拷贝
    12 print(a)
    13 
    14 print(a.fill(1))              # 以上的操作不改变a,但fill填充改变a
    15 print(a)
    16 -------------------------------------------
    17 4
    18 6
    19 [[1, 2, 3], [4, 5, 6], [2, 4, 5]]
    20 b'x01x00x00x00x02x00x00x00x03x00x00x00x04x00x00x00x05x00x00x00x06x00x00x00x02x00x00x00x04x00x00x00x05x00x00x00'
    21 None
    22 [[1. 2. 3.]
    23  [4. 5. 6.]
    24  [2. 4. 5.]]
    25 [[1 2 3]
    26  [4 5 6]
    27  [2 4 5]]
    28 [[1 0 0 0 2 0 0 0 3 0 0 0]
    29  [4 0 0 0 5 0 0 0 6 0 0 0]
    30  [2 0 0 0 4 0 0 0 5 0 0 0]]
    31 [[1 2 3]
    32  [4 5 6]
    33  [2 4 5]]
    34 None
    35 [[1 1 1]
    36  [1 1 1]
    37  [1 1 1]]
    一般方法

     (3)涉及维度的方法:axis = 0表示在第一个维度上操作,axis=1表示在第二个维度上操作

     1 #涉及维度########################################################################
     2 import numpy as np
     3 a = np.array([[1,2,3],[5,4,6],[2,4,5]])
     4 print(a.repeat(2,axis=1))   # 在第二维度上每个元素重复两次
     5 print(a.sort(axis=1))       # 在第二维度上进行排序,改变a,若排序的是数组,则以每个数组第一个元素来进行排序
     6 print(a)
     7 print(a.argsort(axis=1))    # 得出排序的索引
     8 print(a.diagonal())         # 得出对角线元素的数组
     9 -------------------------------------------------------
    10 [[1 1 2 2 3 3]
    11  [5 5 4 4 6 6]
    12  [2 2 4 4 5 5]]
    13 None
    14 [[1 2 3]
    15  [4 5 6]
    16  [2 4 5]]
    17 [[0 1 2]
    18  [0 1 2]
    19  [0 1 2]]
    20 [1 5 5]
    涉及维度

     (4)涉及计算的方法:axis = 0表示在第一个维度上操作,axis=1表示在第二个维度上操作

     1 import numpy as np
     2 a = np.array([[1,2,3],[4,5,6]])
     3 print(a)
     4 # axis表示第几维度的元素进行运算,从0开始,第一维度开始
     5 print(a.max())                    # 获取整个矩阵的最大值 结果: 6
     6 print(a.min())                    # 结果:1
     7 print(a.max(axis=0))              # 获得第一个维度所有元素比较得到(列)的最大(小)值[4 5 6]
     8 print(a.min(axis=1))              # 获得第二个维度所有元素比较得到(行)的最大(小)值[1 4]
     9 print(a.argmax(axis=1))           # 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
    10 print(a.mean())                   # 元素的平均值
    11 print(a.mean(axis=0))             # 每列平均值,第一个维度所有元素加和的平均值[2.5 3.5 4.5]
    12 print(a.mean(axis=1))             # 每行平均值,第二个维度所有元素加和的平均值[2. 5.]
    13 print(a.var())                    # 方差相当于函数mean(abs(x - x.mean())**2)
    14 print(a.std())                    # 标准差相当于sqrt(mean(abs(x - x.mean())**2))
    15 print(np.median(a))               # 对所有数取中值
    16 print(np.median(a,axis=0))        # 列方向取中值
    17 print(a.sum())                    # 对整个矩阵求和
    18 print(a.cumsum())                 # 对整个矩阵求累积和,某位置累积和指的是该位置之前(包括该位置)所有元素的和[ 1  3  6 10 15 21]
    19 print(a.round(4))                 # 四舍五入
    20 print(a.trace())                  # 对角线元素求和6
    21 print(a.prod())                   # 整个数组求积
    22 print(a.cumprod())                # 累积
    23 print(a.all())                    # 布尔判断,且
    24 print(a.any())                    # 布尔判断,或
    25 ------------------------------------------------------------
    26 [[1 2 3]
    27  [4 5 6]]
    28 6
    29 1
    30 [4 5 6]
    31 [1 4]
    32 [2 2]
    33 3.5
    34 [2.5 3.5 4.5]
    35 [2. 5.]
    36 2.9166666666666665
    37 1.707825127659933
    38 3.5
    39 [2.5 3.5 4.5]
    40 21
    41 [ 1  3  6 10 15 21]
    42 [[1 2 3]
    43  [4 5 6]]
    44 6
    45 720
    46 [  1   2   6  24 120 720]
    47 True
    48 True
    简单计算

    4.索引和切片:类似序列,冒号‘:’表示某个维度从...到...,后面还可接步长;逗号‘,’表示分隔不同维度

     1 import numpy as np
     2 a = np.array([[1, 2, 3, 4, 5],
     3               [6, 7, 8, 9, 10]])
     4 print(a)
     5 print(a[1])          # 选取行号为1的全部元素,等于print(a[1, :]),print(a[1, ...])省略号表示该维度都取值
     6 print(a[1][2])       # 截取行号为一,列号为2的元素8,与上面的等价
     7 print(a[:, 2])       # 选择列为2的全部元素 print (a[1,...])
     8 
     9 print(a[:])          # 选取全部元素
    10 print(a[0:1])        # 默认行数截取[0,1),等于print(a[0:1,:])
    11 print(a[1, 2:5])     # 截取第二行第[2,5)的元素[ 8  9 10]
    12 print(a[0:1, 1:3:2]) # 截取第一个维度【0:1),第二个维度【1,3),步长为2的元素
    13 
    14 #  高级索引
    15 rows = np.array([[0,0],[1,1]])
    16 cols = np.array([[0,3],[0,4]])
    17 print(a[rows, cols])  # 整数数组索引,通过不同维度的具体表示来指定具体的索引:(0,0),(0,3),(1,0)(1,4)
    18 # 按条件截取
    19 print(a[a>6])         # 截取矩阵a中大于6的数,范围的是一维数组
    20 print(a > 6)          # 比较a中每个数和6的大小,输出值False或True
    21 a[a > 6] = 0          # 把a中大于6的数变成0,
    22 print(a)
    23 
    24 # 使用~(取补运算符)来过滤NaN
    25 a1 = np.array([np.nan,1,2,np.nan,3,4,5])
    26 print(a1[~np.isnan(a1)])
    27 ----------------------------------------------
    28 [[ 1  2  3  4  5]
    29  [ 6  7  8  9 10]]
    30 [ 6  7  8  9 10]
    31 8
    32 [3 8]
    33 [[ 1  2  3  4  5]
    34  [ 6  7  8  9 10]]
    35 [[1 2 3 4 5]]
    36 [ 8  9 10]
    37 [[2]]
    38 [[ 1  4]
    39  [ 6 10]]
    40 [ 7  8  9 10]
    41 [[False False False False False]
    42  [False  True  True  True  True]]
    43 [[1 2 3 4 5]
    44  [6 0 0 0 0]]
    45 [1. 2. 3. 4. 5.]
    索引和切片

     5.迭代:

    1 import numpy as np
     2 a=np.arange(4,16).reshape(4,3)
     3 print(a)
     4 print('*'*30)
     5 for i in a:#迭代数组
     6     print(i,end=' ')
     7 print()
     8 print('*'*30)
     9 for row in a:#以行迭代数组
    10     print(row,end=' ')
    11 print()
    12 print('*'*30)
    13 for column in a.T:#以列迭代数组
    14     print(column,end=' ')
    15 print()
    16 print('*'*30)
    17 print(a.flatten())#以一个列表的形式存储所有元素
    18 for item in a.flat:#迭代数组的每一个元素
    19     print(item,end=' ')
    20 print()
    21 print('*'*30)
    22 ------------------------------------------------------
    23 [[ 4  5  6]
    24  [ 7  8  9]
    25  [10 11 12]
    26  [13 14 15]]
    27 ******************************
    28 [4 5 6] [7 8 9] [10 11 12] [13 14 15] 
    29 ******************************
    30 [4 5 6] [7 8 9] [10 11 12] [13 14 15] 
    31 ******************************
    32 [ 4  7 10 13] [ 5  8 11 14] [ 6  9 12 15] 
    33 ******************************
    34 [ 4  5  6  7  8  9 10 11 12 13 14 15]
    35 [[ 4  5  6]
    36  [ 7  8  9]
    37  [10 11 12]
    38  [13 14 15]]
    39 4 5 6 7 8 9 10 11 12 13 14 15 
    40 ******************************
    迭代

     6.创建数组

    (1)从已知的数据中创建数组

    【1】array函数创建数组,将元组或列表作为参数

    1 import numpy as np
     2 
     3 # 创建数组,将元组或列表作为参数,dtype设定元素类型
     4 a1 = np.array(  [2, 3, 4]   )#1*3
     5 a2 = np.array(  ([1, 2, 3, 4, 5], [6, 7, 8, 9, 10]) )#2*5
     6 a3 = np.array(  [(1.5, 2, 3), (4, 5, 6)], dtype=complex )#2*3
     7 a4 = np.array(  [[1, 2], [4, 5, 7], 3]  )#3*1
     8 print(a1)
     9 print(a2)
    10 print(a3)
    11 print(a4)
    12 ------------------------------------------------------------
    13 [2 3 4]
    14 [[ 1  2  3  4  5]
    15  [ 6  7  8  9 10]]
    16 [[1.5+0.j 2. +0.j 3. +0.j]
    17  [4. +0.j 5. +0.j 6. +0.j]]
    18 [list([1, 2]) list([4, 5, 7]) 3]
    array

    【2】其他方法:copy、asarray、asmatrix....

    (2)创建特殊数组--给定形状和元素类型

    【1】空数组,实际有值

     1 a_empty = np.empty((3,4),dtype=float) # empty(N)生成一个N长度的未初始化一维的数组,创建3*4的空矩阵
     2 print(a_empty)                        # 空矩阵(实际有值--随机给值)
     3 a = ([1,2,3], [4,5,6])
     4 print(np.empty_like(a))               # 形状和类型与给定数组相同的新数组
     5 -------------------------------------
     6 [[6.23042070e-307 1.42417221e-306 1.37961641e-306 1.27945651e-307]
     7  [8.01097889e-307 1.78020169e-306 7.56601165e-307 1.02359984e-306]
     8  [1.33510679e-306 2.22522597e-306 1.33511562e-306 2.18569063e-312]]
     9 [[6619222 7536754 7274601]
    10  [    110       0       0]]
    空数组

    【2】单位矩阵

    1 a_eye = np.eye(3) # eye(N)创建一个N * N的二维单位矩阵,创建3阶单位矩阵,
    2 print(a_eye)      # 单位矩阵,等同于np.identity( N )
    3 ------------------------------------------
    4 [[1. 0. 0.]
    5  [0. 1. 0.]
    6  [0. 0. 1.]]
    单位矩阵

    【3】全1数组

     1 a_ones = np.ones((3,4)) # ones(N)生成一个N长度的一维全一的数组,创建3*4的全1矩阵
     2 print(a_ones)           # 全1矩阵
     3 a1 = np.arange(6).reshape((2, 3))
     4 print(np.ones_like(a1)) # 创建类似的全1矩阵
     5 ----------------------------------
     6 [[1. 1. 1. 1.]
     7  [1. 1. 1. 1.]
     8  [1. 1. 1. 1.]]
     9 [[1 1 1]
    10  [1 1 1]]
    全1数组

    【4】全0数组

     1 a_zeros = np.zeros((3,4)) # zeros(N)生成一个N长度的一维全零的数组,创建3*4的全0矩阵
     2 print(a_zeros)            # 全0矩阵
     3 a1 = np.arange(6).reshape((2, 3))
     4 print(np.zeros_like(a1))  # 创建类似结构的全0矩阵
     5 --------------------------
     6 [[0. 0. 0. 0.]
     7  [0. 0. 0. 0.]
     8  [0. 0. 0. 0.]]
     9 [[0 0 0]
    10  [0 0 0]]
    全0数组

    【5】填充数组

     1 # 以某个数填充数组,即把每个单位元素都变为该数
     2 print(np.full((2, 2), np.inf))                   
     3 print(np.full((2, 2), 10))
     4 print(np.full_like(np.arange(6, dtype=int), 1))
     5 -----------------------------------
     6 [[inf inf]
     7  [inf inf]]
     8 [[10 10]
     9  [10 10]]
    10 [1 1 1 1 1 1]
    填充数组

    (3) 给定范围创建特殊数组

    【1】np.arrage():给定间隔内的均匀间隔的值,创建数组序列(一维),类似range,不过返回的是数组而不是列表,右边默认为开区间

    1 import numpy as np
    2 a = np.arange(12)         # 利用arange函数创建数组,
    3 print(a)
    4 a2=np.arange(1,2,0.1)    # arang函数和range函数相似,(开始,结束,步长)
    5 print(a2)
    6 ---------------------------------------------------
    7 [ 0  1  2  3  4  5  6  7  8  9 10 11]
    8 [1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9]
    arange

    【2】linspace用于创建指定数量等间隔的序列,实际生成一个等差数列,右边默认为闭区间

    1 a = np.linspace(0,1,12)  # 从0开始到1结束,共12个数的等差数列
    2 a2 = np.linspace(2.0, 3.0, num=5) # 从2.0开始到3.0结束,共5个数的等差数列
    3 print(a)
    4 print(a2)
    5 --------------------------------
    6 [0.         0.09090909 0.18181818 0.27272727 0.36363636 0.45454545
    7  0.54545455 0.63636364 0.72727273 0.81818182 0.90909091 1.        ]
    8 [2.   2.25 2.5  2.75 3.  ]
    等差数列

    【3】logspace和geomspace用于生成等比数列,对数刻度均匀分布,右边默认为闭区间

    1 a = np.logspace(2.0, 8.0, num=4, base=2.0)  # 生成首位是2的2次方,末位是2的8次方,含4个数的等比数列
    2 # 等价于2-8分成四份(2,4,6,8),然后以2为底的指数
    3 print(a)
    4 a2 = np.geomspace(1, 1000, num=4) # 生成从1到1000的等比数列,自动计算比
    5 print(a2)
    6 ----------------------------------------
    7 [  4.  16.  64. 256.]
    8 [   1.   10.  100. 1000.]
    等比数列

    【4】坐标矩阵

     1 nx, ny = (3, 2)
     2 x = np.linspace(0, 1, nx)
     3 y = np.linspace(0, 1, ny)
     4 xv, yv = np.meshgrid(x, y)  # 坐标系网格,有对应关系
     5 print(xv)
     6 print(yv)
     7 --------------------------------
     8 [[0.  0.5 1. ]
     9  [0.  0.5 1. ]]
    10 [[0. 0. 0.]
    11  [1. 1. 1.]]
    网格坐标

    (4)其他特殊矩阵:对角矩阵,上三角和下三角矩阵

     1 x = np.arange(1,10).reshape((3,3))
     2 print(x)
     3 print(np.diag(x))           # 提取对角线元素组成数组
     4 print(np.diag(np.diag(x)))  # 根据数组创建对角矩阵
     5 print(np.tril(x))           # 下三角矩阵
     6 print(np.triu(x))              # 上三角矩阵
     7 ----------------------------------------
     8 [[1 2 3]
     9  [4 5 6]
    10  [7 8 9]]
    11 [1 5 9]
    12 [[1 0 0]
    13  [0 5 0]
    14  [0 0 9]]
    15 [[1 0 0]
    16  [4 5 0]
    17  [7 8 9]]
    18 [[1 2 3]
    19  [0 5 6]
    20  [0 0 9]]
    其他矩阵

    三.数组间的操作

    1.基本运算

     1 a = np.array([[1, 2],
     2               [4, 1]])
     3 b = np.array([[2, 2],
     4               [3, 4]])
     5 print(a + b)     # 对应元素相加
     6 print(a - b)     # 对应元素相减
     7 print(a/b)       # 对应元素相除
     8 print(a//b)      # 对应元素取整
     9 print(a % b)     # 对应元素相除后取余数
    10 print(a * b)     # 每个元素对应元素的相乘---点乘(数量积)(内积)--相当于print(np.multiply(a,b))
    11 print(a.dot(b))  # 矩阵乘法--叉乘(向量积)(外积)---相当于print(a @ b)--第一个矩阵的列数等于第二个矩阵的行数
    12 print(2+a)       # 标量与矩阵元素运算,+/-/*//
    13 print(a < 3)     # 布尔运算,每个元素的比较
    14 print(b ** 2)    # 每个元素的乘方
    15 
    16 import numpy.linalg as lg  # 求矩阵的逆需要先导入numpy.linalg用linalg的inv函数来求逆
    17 print(lg.inv(a))  # 求逆
    18 ----------------------------------------
    19 [[3 4]
    20  [7 5]]
    21 [[-1  0]
    22  [ 1 -3]]
    23 [[0.5        1.        ]
    24  [1.33333333 0.25      ]]
    25 [[0 1]
    26  [1 0]]
    27 [[1 0]
    28  [1 1]]
    29 [[ 2  4]
    30  [12  4]]
    31 [[ 8 10]
    32  [11 12]]
    33 [[3 4]
    34  [6 3]]
    35 [[ True  True]
    36  [False  True]]
    37 [[ 4  4]
    38  [ 9 16]]
    39 [[-0.14285714  0.28571429]
    40  [ 0.57142857 -0.14285714]]
    基本运算

    2.数组堆叠

     1 a1 = np.array([[1, 2], [3, 4]])
     2 a2 = np.array([[5, 6], [7, 8]])
     3 
     4 # 1. 水平堆叠,横向合并
     5 print(np.hstack([a1,a2]))  # 参数传入时要以列表list或元组tuple的形式传入
     6 print(np.concatenate((a1, a2), axis=1)) # 和hstack一样,axis=1表示两个数组对应的第二维度中的元素叠加,第一维度长度不变
     7 print(np.stack((a1, a2), axis=1))  # 两个数组沿新轴连接数组序列
     8 
     9 # 2.纵向合并,垂直堆叠
    10 print(np.vstack([a1,a2]))
    11 print(np.concatenate((a1, a2), axis=0)) # 和vstack一样,axis=0表示两个数组对应的第一维度中的元素叠加,第二维度长度不变
    12 print(np.stack((a1, a2), axis=0))  # 两个数组沿新轴连接数组序列
    13 -----------------------------------
    14 [[1 2 5 6]
    15  [3 4 7 8]]
    16 [[1 2 5 6]
    17  [3 4 7 8]]
    18 [[[1 2]
    19   [5 6]]
    20 
    21  [[3 4]
    22   [7 8]]]
    23 [[1 2]
    24  [3 4]
    25  [5 6]
    26  [7 8]]
    27 [[1 2]
    28  [3 4]
    29  [5 6]
    30  [7 8]]
    31 [[[1 2]
    32   [3 4]]
    33 
    34  [[5 6]
    35   [7 8]]]
    数组堆叠

    3.数组拆分

     1 a = np.arange(12).reshape(3,4)
     2 print(a)
     3 
     4 # 1.纵向分割
     5 print(np.vsplit(a,3))  # 纵向分割,分割线为水平
     6 print(np.split(a,3,axis=0))  # 对a进行分割成3块,以行方向进行操作,对第一维度中的元素进行分割
     7 
     8 # 2.横向分割
     9 print(np.hsplit(a,2))
    10 print(np.split(a,2,axis=1))  # 对a进行分割成2块,以列方向进行操作,对第二维度中的元素进行分割
    11 
    12 # 注意:split分割只能进行相等的分割
    13 ——————————————————————————————————————————
    14 [[ 0  1  2  3]
    15  [ 4  5  6  7]
    16  [ 8  9 10 11]]
    17 [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
    18 [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
    19 [array([[0, 1],
    20        [4, 5],
    21        [8, 9]]), array([[ 2,  3],
    22        [ 6,  7],
    23        [10, 11]])]
    24 [array([[0, 1],
    25        [4, 5],
    26        [8, 9]]), array([[ 2,  3],
    27        [ 6,  7],
    28        [10, 11]])]
    数组拆分

    4.其他操作

     1 a = np.array([[1,2,3],[4,5,6]])
     2 print(np.append(a, [[7,8,9]],axis=0))  # 对于第一维度添加一个元素
     3 print(np.append(a, [[5,5,5],[7,8,9]],axis=1))  # 对于第二维度,添加元素
     4 print(np.insert(a, 2, 11, axis=1))  # 在给定索引之前,沿给定轴在输入数组中插入值
     5 print(np.insert(a,1,[11],axis = 0))  # 在第一维度中插入元素
     6 print(np.delete(a,1,axis = 1))  # 在第二维度中删除第二个元素
     7 
     8 a2 = np.array([5,2,6,2,7,5,6,8,2,9])
     9 print(np.unique(a2))   # 去重
    10 -------------------------------------------------
    11 [[1 2 3]
    12  [4 5 6]
    13  [7 8 9]]
    14 [[1 2 3 5 5 5]
    15  [4 5 6 7 8 9]]
    16 [[ 1  2 11  3]
    17  [ 4  5 11  6]]
    18 [[ 1  2  3]
    19  [11 11 11]
    20  [ 4  5  6]]
    21 [[1 3]
    22  [4 6]]
    23 [2 5 6 7 8 9]
    其他操作

    四.矩阵类matrix

    1.和数组类似,继承 ndarray类,也有对应的方法和属性,但是它必须是2维的

    2.一般来说,我们使用ndarray而不使用matrix

    五.numpy里的random 模块

     1 # 浮点数数组
     2 print(np.random.rand(2, 3))  # 给定形状,生成随机0-1均匀分布的数组
     3 print(np.random.randn(2,3))  # 返回一个具有标准正太分布的样本
     4 print(np.random.random((3, 2)))#返回随机的浮点数,在半开区间 [0.0, 1.0)
     5 #rangdom方法相当于ranf/sample/random_sample
     6 
     7 # 整数数组
     8 print(np.random.randint(low=5,high=20, size=(2, 4)))  # 返回【5,20)的整数数组
     9 
    10 #子数组
    11 print(np.random.choice([5,4,5,6,2],[3,2]))#从给定的数组,生成满足形式的数组
    12 print(np.random.bytes(10)) # 返回随机字节。
    13 
    14 #排序
    15 arr = np.arange(10)
    16 np.random.shuffle(arr)  # 修改序列,改变自身内容
    17 print(arr)
    18 arr2=np.random.permutation(10)  # 返回一个随机排列
    19 print(arr2)
    20 -----------------------------
    21 [[0.95669054 0.2450761  0.4263026 ]
    22  [0.56699365 0.5552199  0.15680032]]
    23 [[ 0.04848332  0.99717328 -0.47334977]
    24  [-0.13636914 -1.44547204  0.7402848 ]]
    25 [[0.46582226 0.90037162]
    26  [0.01326151 0.13804806]
    27  [0.90242105 0.64924892]]
    28 [[ 8 12  9 10]
    29  [18  9 12  9]]
    30 [[4 6]
    31  [2 5]
    32  [5 5]]
    33 b'q: $Yxadxb9/Jxc9'
    34 [0 4 9 8 6 2 5 3 7 1]
    35 [0 5 1 9 4 8 3 2 7 6]
    随机数

    六.其他

    三.

  • 相关阅读:
    android activity状态保存
    android的5个进程等级
    android什么时候会产生ANR
    android压力测试monkey简单使用
    CodeIgniter学习笔记五:分页,文件上传,session,验证码
    CodeIgniter学习笔记四:CI中的URL相关函数,路由,伪静态,去掉index.php
    Scrapy使用示例
    CodeIgniter学习笔记三:扩展CI的控制器、模型
    Queries for Number of Palindromes(区间dp)
    Dungeon Master(三维bfs)
  • 原文地址:https://www.cnblogs.com/yu-liang/p/12974273.html
Copyright © 2011-2022 走看看