Jocx's blog

来了就先看看吧,没准有用呢?

0%

【语法】Python包——Numpy用法速查

Python包——Numpy用法速查

数组

最基本的numpy元素,矩阵就相当于二维的数组。

数组属性

较为有用的属性如下:

  • shape:一个元组,需要第几维的大小需要取出。一维的也需要。
  • size:数组大小\(行\times 列\)
  • dtype:数组的类型。可以是int、float、complex、bool。
    • 实际上numpy 支持的数据类型比 Python 内置的类型要多很多,大部分和C语言里面的对应,这里不一一说明。
  • ndim:数组的维度,矩阵就是二维,向量就是一维。

构造numpy数组

注意:一下所有的_shape_如果是一个整数那就是一维。

  • np.empty(shape, dtype):构造空的数组,shape应该是一个元组;dtype可选,是数组的类型。
  • np.zeros(shape, dtype):同上。
  • np.ones(shape, dtype):同上。
  • np.asarray(a, dtype):a是任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组。dtype同上。
  • np.array(a, dtype):同上。
  • numpy.arange(start, stop, step, dtype):根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。

数组方法

注意:以下用array来代表numpy数组

  • array.reshape(n1, n2, ..., order):表示重新构造数组的维度,有多少个参数就构造多少维,但注意\(array.size = n_1 \times n_2 \times...\)
    • order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。
  • array.flat:以行遍历迭代数组里所有的元素。
  • array.flatten(order):返回一份深拷贝。order同上。
  • array.T:数组的转置。

数组切片/索引

数组的切片用于访问某个元素,或者是取用数组的部分内容。切片和list一样

1
2
3
4
5
6
import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8]).reshape(4, 4) # 这是一个4*4矩阵
b = a[:, 2] # b是矩阵的第三列向量
c = a[1, 3] # c是矩阵的2行4列元素
d = a[1:, 1:2] # d是一个3*2的矩阵

逗号数和维度有关,不同的维度之间用逗号隔开

布尔索引

带有逻辑操作的索引

1
2
3
4
5
6
import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8]).reshape(4, 4)
b = a[a > 5] # b是a里面大于5的元素组成的一维数组
c = a[~np.isnan(a)] # c是a里面所有不为nan元素的一维数组
d = a[np.iscomplex(a)] # d是a里面所有复数的一维数组

对数组数据处理

非数学处理

判断

  • np.isnan(array):返回布尔数组,有nan的地方就是True,其余为False。
  • np.iscomplex(array):效果与上类似,判断复数的。

遍历

  • np.nditer(array, op_flags, flags, order):迭代数组,任何维都可以。返回一个迭代对象。

    • order:字符串,遍历顺序:'F'遍历列,'C'遍历行。
    • op_flags:字符串数组,表示读写权限。可以为__readwrite、writeonly__。
    • flags:字符串数组,一些常用的操作。常用有'external_loop',给出的值是具有多个值的一维数组,而不是零维数组。
    1
    2
    3
    4
    5
    6
    import numpy as np

    a = np.arange(0,60,5).reshape(3, 4)
    for x in np.nditer(a, flags=['external_loop'], order='F'):
    print(x, end=", ")
    # 结果是[ 0 20 40], [ 5 25 45], [10 30 50], [15 35 55],

数学处理

  • np.transpose(array, axes):更强大的转置,可以支持多维。axes整数元组,对应维度。

    1
    2
    3
    4
    5
    import numpy as np

    a = np.arange(18).reshape(2, 3, 3)
    print(a)
    print(np.transpose(a, axes=(0, 2, 1))) # 第2维和第3维转置后的数组
  • np.expand_dims(array, axis):升维,axis用关键字给实参,是整数,表示要扩展第几维,从0开始,不可以跳维升级。

  • np.squeeze(array, axis):降维,axis同上。维度必须是0才能降。

数组扩展

  • np.concatenate((array1, array2), axis):扩展数组,array1、array2为相同维度的数组。axis规范同上,表示沿着哪个维度进行拓展。注意:拓展方向的大小要一致。
  • np.insert(arr, obj, values, axis):沿指定轴在对应位置插入数组,返回一个插入后的新数组。
    • obj在其之前插入值的索引。
    • values要插入的值,要和对应维度大小相同。
    • axis:指定维度。

Numpy数学

numpy独自提供了一套数学属性和方法,可以不用引入math包

特殊值

np.pi:π

三角函数

都是接纳数组返回对应数组的。入参都是数组

  • np.cos()、np.sin()、np.tan()、np.arccos()、np.arcsin()、np.arctan()
  • np.degrees():弧度转角度的。角度转弧度直接除以\(2π\)

位数处理

  • np.around(a,decimals):a是数组;decimals舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置。
  • np.floor(a):向下取整。
  • np.ceil():向上取整。

算术计算

数组必须具有相同的形状或符合数组广播规则。

可以暂时理解为所有数组元素的对应运算。

  • np.add(a1, a2)、np.substract(a1, a2)、np.multiply(a1, a2)、np.divide(a1, a2):加减乘除。可以用+、-、*、/来代替。
  • np.power(a)、np.mod(a):取模和乘方,可以用%、**代替。
  • np.reciprocal(a):求倒数。

统计方法

Numpy线性代数

矩阵库

Numpy中的矩阵就是二维的数组。有些构造可以用reshape来完成,所以有些构造不过多赘述。

Numpy中的矩阵操作要import numpy.matlib

构造矩阵特殊

  • eye(n, M,k, dtype):对角线矩阵。n: 返回矩阵的行数;M: 返回矩阵的列数,默认为 n;k: 对角线的起始索引;dtype: 数据类型。
  • rand(m, n):创建一个给定大小\(m\times n\)的矩阵,数据是随机填充的。

线代运算函数

这里只介绍他们的基本用法。

  • np.dot(a, b):如果a,b是向量,就是內积;如果a,b是矩阵,就是矩阵积。
  • np.vdot(a, b):数组展开计算內积。多维的展开成一维的计算內积。
  • np.inner(a, b):向量a,b的內积计算。
  • np.matmul(a, b):矩阵积。
  • np.linalg.det(a):计算a的內积。
  • np.linalg.solve(a):给出a矩阵形式的线性方程的解。
  • np.linalg.inv(a):计算a的逆矩阵。a必须为方阵。

matplotlib

他是python的绘图库,可与numpy一起使用。也可以和图形工具包一起使用,如PyQt和wxPython。

线性平面图

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

plt.title('str') # 设置表头,只能是英文
plt.xlabel('str') # 设置x轴
plt.ylabel('str') # 设置y轴
plt.plot(x, y) # 画图,x和y是np一维数组
plt.show() # 展示图片
-------------本文结束 感谢您的阅读-------------