NumPy是Python中一个重要的数学库,它提供了高效的数组操作和数学函数,是数据科学、机器学习、科学计算等领域的重要工具。下面是一个简单的NumPy学习教程,介绍了NumPy的基本用法和常用函数。
安装NumPy
在使用NumPy之前,需要先安装它。可以使用pip命令来安装NumPy,命令如下:
pip install numpy
导入NumPy
安装NumPy之后,可以使用import语句来导入NumPy库,命令如下:
import numpy as np
在上述代码中,我们使用import语句导入了NumPy库,并将它的别名设置为np。
创建NumPy数组
NumPy中最基本的数据结构是数组(array),可以使用NumPy库中的np.array()
函数来创建数组。下面是一个创建一维数组和二维数组的例子:
import numpy as np# 创建一维数组
a = np.array([1, 2, 3])
print(a)# 创建二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
输出结果为:
[1 2 3]
[[1 2 3][4 5 6]]
在上述代码中,我们使用np.array()
函数创建了一维数组和二维数组,并使用print语句输出了它们的值。
数组属性
NumPy数组有一些重要的属性,例如形状(shape)、维度(ndim)、元素类型(dtype)等。可以使用数组的属性来获取这些信息。下面是一个获取数组属性的例子:
import numpy as np# 创建数组
a = np.array([[1, 2, 3], [4, 5, 6]])# 获取数组属性
print("形状:", a.shape)
print("维度:", a.ndim)
print("元素类型:", a.dtype)
输出结果为:
形状: (2, 3)
维度: 2
元素类型: int64
在上述代码中,我们使用np.array()
函数创建了一个二维数组,并使用数组的属性来获取它的形状、维度和元素类型。
数组索引和切片
可以使用索引和切片来访问NumPy数组中的元素。和Python中的列表一样,NumPy数组的索引从0开始,可以使用负数索引从数组末尾开始计数。下面是一个访问数组元素的例子:
import numpy as np# 创建数组
a = np.array([[1, 2, 3], [4, 5, 6]])# 访问数组元素
print(a[0, 1])
print(a[-1, -2])# 切片访问数组元素
print(a[0, :])
print(a[:, 1])
print(a[0:2, 1:3])
输出结果为:
2
5
[1 2 3]
[2 5]
[[2 3][5 6]]
在上述代码中,我们使用np.array()
函数创建了一个二维数组,并使用索引和切片来访问它的元素。需要注意的是,使用冒号(:)可以访问整个行或列,例如a[:, 1]
表示访问数组的第二列。
数组运算
NumPy数组支持各种数学运算,例如加减乘除、指数、对数、三角函数等。可以使用NumPy库中提供的函数来进行这些运算。下面是一个进行数组运算的例子:
import numpy as np# 创建数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 数组运算
print("加法:", a + b)
print("减法:", a - b)
print("乘法:", a * b)
print("除法:", a / b)
print("指数:", np.exp(a))
print("对数:", np.log(a))
print("三角函数:", np.sin(a))
输出结果为:
加法: [5 7 9]
减法: [-3 -3 -3]
乘法: [ 4 10 18]
除法: [0.25 0.4 0.5 ]
指数: [ 2.71828183 7.3890561 20.08553692]
对数: [0. 0.69314718 1.09861229]
三角函数: [0.84147098 0.90929743 0.14112001]
在上述代码中,我们使用np.array()
函数创建了两个一维数组,并使用NumPy库中的函数进行了各种数学运算。
广播
广播是NumPy中一种重要的机制,它允许不同形状的数组进行运算。当进行二元运算时,如果两个数组的形状不同,NumPy会自动将它们进行扩展,使它们的形状相同,然后再进行运算。下面是一个使用广播进行数组运算的例子:
import numpy as np# 创建数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 广播运算
print("加法:", a + 1)
print("加法:", a + b.reshape(3, 1))
输出结果为:
加法: [2 3 4]
加法: [[5 6 7][6 7 8][7 8 9]]
在上述代码中,我们使用np.array()
函数创建了两个一维数组,并使用广播机制进行了各种数学运算。需要注意的是,当进行a + 1
的运算时,NumPy会自动将标量1扩展为长度为3的一维数组,然后再进行运算。当进行a + b.reshape(3, 1)
的运算时,NumPy会自动将数组b的形状扩展为(3, 1),然后再进行运算。
其他常用函数
NumPy库中还有很多其他常用的函数,例如统计函数、线性代数函数、随机数函数等。下面是一个使用NumPy库中其他函数的例子:
import numpy as np# 创建数组
a = np.array([[1, 2, 3], [4, 5, 6]])# 统计函数
print("最大值:", np.max(a))
print("最小值:", np.min(a))
print("平均值:", np.mean(a))
print("标准差:", np.std(a))# 线性代数函数
b = np.array([[4], [5], [6]])
print("矩阵乘法:", np.dot(a, b))# 随机数函数
print("随机数:", np.random.rand(2, 3))
输出结果为:
最大值: 6
最小值: 1
平均值: 3.5
标准差: 1.707825127659933
矩阵乘法: [[32][77]]
随机数: [[0.66256929 0.59886499 0.06279318][0.44847655 0.28782597 0.83462457]]
在上述代码中,我们使用NumPy库中的统计函数、线性代数函数、随机数函数进行了各种操作。需要注意的是,np.dot()
函数用于进行矩阵乘法,np.random.rand()
函数用于生成指定形状的随机数数组。
一个简单示例:
根据二维向量D求解得到和d,可按照以下书写:
D = numpy.dot(V_numpy,F_numpy)
d = numpy.sum(D,axis=-1)#先把二维降为一维
d = numpy.sum(d,axis=-1)*0.5# 把一维降为零维