• python之Numpy(三)


    目录

    一,改变数组的维度和形状

    二,矩阵的拼接

    2.1 图解矩阵的拼接

    2.2 拼接方法一览

    2.3 concatenate函数详解

    2.4 hstack,vstack,dstack,stack详解

    三,矩阵的转置

    3.1 图解矩阵转置

    3.2 transpose方法|函数实现转置

    四,数组的分隔

    4.1 图解数组的分隔

    4.2 numpy.split实现行矩阵分隔

    4.3 hsplit,vsplit分隔矩阵

    五,数学函数

    5.1 数学函数一览

    5.2 演示例子

    六,算数函数

    七,统计函数

    7.1 统计函数一览

    7.2 各种函数使用方法举例

    八,其他函数一览


    一,改变数组的维度和形状

            通过reshape方法可以将一维数组变成二维、三维或者多维数组, 也可以通过reshape方法将多维数组变成一维。注意:reshape的ndarray对象的实例方法。

            通过ravel方法或flatten方法可以将多维数组变成一维数组。

            改变数组的维度还可以直接设置Numpy数组的shape属性(元组类型),通过resize方法也可以改变数组的维度,resize方法的参数是一个元组。

    1. import numpy as np
    2. # 创建一维的数组
    3. a = np.arange(24)
    4. # 使用reshape将一维数组变成三维数组
    5. b = a.reshape(2, 3, 4) # 2x3x4=24
    6. # 将a变成二维数组
    7. c = a.reshape(3, 8)
    8. # 将多维数组变成一维数组
    9. print(c.reshape(-1))
    10. ##############################################
    11. # 使用ravel函数将三维的b变成一维的数组
    12. a1 = b.ravel()
    13. # 使用flatten函数将二维的c变成一维的数组
    14. a2 = c.flatten()
    15. # 使用shape属性将三维的b变成二维数组(6行4列)
    16. b.shape = (6, 4)
    17. # 使用resize修改数组的维度
    18. b.resize((2, 12))

    二,矩阵的拼接

    2.1 图解矩阵的拼接

            由下图可知,矩阵的拼接需要格式相同,行数或者列数至少有一个要一致。

    2.2 拼接方法一览

    2.3 concatenate函数详解

            语法格式:np.concatenate((a1, a2, ...), axis),axis取0,1,2,……,表示每个维度的轴x,y,z……。a1,a2,a3,……是形状相同的数组。

    1. import numpy as np
    2. x = np.arange(1, 4)
    3. y = np.arange(4, 7)
    4. print(np.concatenate((x, y), axis=0))

    2.4 hstack,vstack,dstack,stack详解

            hstack,vstack,dstack分别对应水平,垂直,正交三个方向的拼接。dstack在三维矩阵的第三个方向进行拼接。

            stack()函数的原型是numpy.stack(arrays, axis=0),即将一堆数组的数据按照指定的方向进行堆叠。参数如下:stack([a1,a2,……],axis),stack的axis只能取0和1,因为stack只能用一维数组拼二维矩阵。

            vstack,dstack,stack已经指定了拼接方向,参数如下:([a1,a2,……])。

            注意:上述所有方法返回的都是ndarray矩阵对象。

    三,矩阵的转置

    3.1 图解矩阵转置

            即:行列互换。

    3.2 transpose方法|函数实现转置

    1. import numpy as np
    2. # transpose进行转置
    3. # 二维转置
    4. a = np.arange(1, 13).reshape(2, 6)
    5. print('原数组a')
    6. print(a)
    7. print('转置后的数组')
    8. print(a.transpose()) # 作为ndarray对象的实例方法,也可以使用np.transcope()函数
    9. print(a.T)

            一般只进行二维矩阵的转置。二维矩阵的转置也可以使用np.transcope()函数,参数如下:(ndarray,(1,0)),第二个参数是一个元组,一般为(1,0)表示x和y互换。

    四,数组的分隔

    4.1 图解数组的分隔

            注意:分隔之后将结果放入一个列表返回,列表的每个元素的类型为ndarray。

    4.2 numpy.split实现行矩阵分隔

            函数详解:numpy.split(ary, indices_or_sections, axis)。

            ary:被分隔的对象;        

            indices_or_sections:如果是一个整数,就用该数平均切分(需要确保能够被整分)。如果是一个数组,为沿轴切分的位置 (左开右闭), 如indices_or_sections=[2,5]表示把ary从0-2分一份,2-5分一份,5至-1为一份。

            axis:轴的序号。当分隔二维矩阵时,需要指定axis=0或者1。

    1. import numpy as np
    2. x = np.arange(1, 9)
    3. a = np.split(x, 4)
    4. print(a)
    5. print(a[0])
    6. print(a[1])
    7. print(a[2])
    8. print(a[3])
    9. # 传递数组进行分隔
    10. b = np.split(x, [3, 5])
    11. print(b)
    12. # [array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
    13. # [1 2]
    14. # [3 4]
    15. # [5 6]
    16. # [7 8]
    17. # [array([1, 2, 3]), array([4, 5]), array([6, 7, 8])

    4.3 hsplit,vsplit分隔矩阵

            用于分隔矩阵,他们的参数,(ary,x:int),需注意可被int整分。他们已经指定了axis的值。

    五,数学函数

            由于numpy是基于矩阵进行运算,所以numpy的数学函数会自动将矩阵中的数据进行遍历运算,即使是二维矩阵也会全部遍历。

    5.1 数学函数一览

    5.2 演示例子

    1. import numpy as np
    2. x = np.arange(1, 9, dtype=float)
    3. print(np.reciprocal(x))
    4. y = np.arange(1, 13, dtype=float).reshape(3, 4)
    5. print(np.reciprocal(y))

    六,算数函数

            算数运算符+,-,x,/,**,%等实际上都是函数实现的。如果参与运算的两个对象都是ndarray,并且形状相同,那么会对彼此之间进行(+ - * /)运算。注意进行运算的前提是:两个或多个矩阵满足运算的shape。

            NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply()。即:+对于add,-对于substact……。

            注意这里的运算只是矩阵对应元素的加减乘除,并不是线性代数中的矩阵乘法。线代中的矩阵乘法使用matmul(a1,a2)或者点乘np.(a1,a2)。

    1. import numpy as np
    2. a = np.arange(9, dtype=np.float).reshape(3, 3)
    3. b = np.array([10, 10, 10])
    4. print(np.add(a, b))
    5. print(a + b)
    6. print(np.subtract(a, b))
    7. print(a - b)
    8. print(np.multiply(a, b))
    9. print(a * b)
    10. print(np.divide(a, b))
    11. print(a / b)

            out参数的使用,当需要接受计算结果时,用out指定一个empty矩阵的进行接受即可。

    1. x = np.arange(5)
    2. y = np.empty_like(x)
    3. np.multiply(x, 10, out=y)
    4. print(y)

            numpy.mod() 计算输入数组中相应元素的相除后的余数。函数 numpy.remainder() 也产生相同的结果。

    七,统计函数

    7.1 统计函数一览

    7.2 各种函数使用方法举例

    1. import numpy as np
    2. # power()函数的使用
    3. x = np.arange(1, 5)
    4. y = np.empty_like(x)
    5. np.power(x, 2, out=y)
    6. print(y)
    7. # median ()函数的使用
    8. a = np.array([4, 2, 1, 5])
    9. # 计算偶数的中位数
    10. print('偶数的中位数:', np.median(a))
    11. a = np.array([4, 2, 1])
    12. print('奇数个的中位数:', np.median(a))
    13. a = np.arange(1, 16).reshape(3, 5)
    14. print('调用median函数')
    15. print(np.median(a))
    16. print('调用median函数,axis=1 行的中值')
    17. print(np.median(a, axis=1))
    18. print('调用median函数,axis=0 列的中值')
    19. print(np.median(a, axis=0))
    20. # mean()函数的使用
    21. a = np.arange(1, 11).reshape(2, 5)
    22. print(np.mean(a))
    23. print('调用mean函数 axis=0 列')
    24. print(np.mean(a, axis=0))
    25. print('调用mean函数 axis=1 行')
    26. print(np.mean(a, axis=1))
    27. # 函数的使用
    28. a = np.random.randint(10, 50, size=20)
    29. np.max(a)
    30. np.sum(a)
    31. np.min(a)
    32. np.max(a)
    33. np.ptp(a)
    34. np.unique(a)
    35. np.nonzero(a)

    八,其他函数一览

  • 相关阅读:
    Linux性能学习(4.6):网络_孤儿连接、半连接状态、RTS复位报文简述
    【MySQL必知必会】 范式 | ER模型
    微信小程序自动化采集方案
    vue.js毕业设计,基于vue.js前后端分离订座预约小程序系统 开题报告
    采用python 批量下载ocean color中的卫星数据
    CNN(卷积网络)如何处理Size(Shape)大小可变的输入图像数据
    C生万物之函数
    crush
    Spring Boot 中使用 Swagger
    GCC编译器
  • 原文地址:https://blog.csdn.net/weixin_44992737/article/details/126158391