Python numpy教程
1. 简介
NumPy是Python中最重要的科学计算库之一。它提供了高性能的多维数组对象和一组处理这些数组的工具。通过使用Numpy,我们可以简化数组操作和数学计算,并且可以高效地处理大量的数据。
本文将对NumPy的基本操作进行详解,包括数组的创建、索引和切片、数学运算、数组操作等。
在开始之前,请确保你已经安装了NumPy库,你可以通过下面的命令安装:
pip install numpy
同时,我们也将使用Jupyter Notebook来展示示例代码,如果你还没有安装Jupyter Notebook,可以通过下面的命令进行安装:
pip install jupyter
2. 数组的创建
NumPy的核心对象是ndarray
,即多维数组。我们可以通过多种方式来创建NumPy数组。
2.1. 从列表创建数组
我们可以使用numpy.array()
函数来从列表创建NumPy数组,示例如下:
import numpy as np
# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1) # 输出: [1 2 3 4 5]
# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
# 输出:
# [[1 2 3]
# [4 5 6]]
2.2. 使用内置函数创建数组
NumPy还提供了一些内置函数来创建特定的数组。常用的函数包括:
numpy.zeros(shape)
:创建一个全是0的数组。numpy.ones(shape)
:创建一个全是1的数组。numpy.full(shape, value)
:创建一个指定值的数组。
示例如下:
import numpy as np
# 创建一个全是0的数组
arr1 = np.zeros((3, 3))
print(arr1)
# 输出:
# [[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
# 创建一个全是1的数组
arr2 = np.ones((2, 2))
print(arr2)
# 输出:
# [[1. 1.]
# [1. 1.]]
# 创建一个指定值的数组
arr3 = np.full((2, 2), 5)
print(arr3)
# 输出:
# [[5 5]
# [5 5]]
2.3. 从现有的数组创建
我们还可以从现有的数组创建新的数组,可以使用numpy.copy()
函数或者ndarray.copy()
方法来实现。示例如下:
import numpy as np
# 创建一个现有的数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr1)
# 输出:
# [[1 2 3]
# [4 5 6]]
# 使用numpy.copy()函数创建一个新的数组
arr2 = np.copy(arr1)
print(arr2)
# 输出:
# [[1 2 3]
# [4 5 6]]
# 使用ndarray.copy()方法创建一个新的数组
arr3 = arr1.copy()
print(arr3)
# 输出:
# [[1 2 3]
# [4 5 6]]
2.4. 使用内置函数创建特定格式的数组
在科学计算中,常常会使用到一些特定格式的数组,例如等差数列和等差矩阵。NumPy提供了一些内置函数来创建这些特定格式的数组。
2.4.1. 创建等差数列
我们可以使用numpy.arange(start, stop, step, dtype)
函数创建一个等差数列。该函数的参数含义如下:
start
:数列的起始值。stop
:数列的结束值(不包含)。step
:数列的步长。dtype
:数列的数据类型。
示例如下:
import numpy as np
# 创建一个等差数列
arr = np.arange(0, 10, 2)
print(arr) # 输出: [0 2 4 6 8]
2.4.2. 创建等差矩阵
我们可以使用numpy.linspace(start, stop, num, endpoint, retstep, dtype)
函数创建一个等差矩阵。该函数的参数含义如下:
start
:数列的起始值。stop
:数列的结束值。num
:数列的个数。endpoint
:数列是否包含结束值。retstep
:数列是否返回步长。dtype
:数列的数据类型。
示例如下:
import numpy as np
# 创建一个等差矩阵
arr = np.linspace(0, 1, 5)
print(arr) # 输出: [0. 0.25 0.5 0.75 1. ]
3. 数组的索引和切片
NumPy数组与Python中的列表类似,可以通过索引和切片来访问数组中的元素。
3.1. 一维数组的索引和切片
对于一维数组,可以使用索引和切片来获取数组中的元素。示例如下:
import numpy as np
# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])
# 使用索引获取数组中的元素
print(arr[0]) # 输出: 1
# 使用切片获取数组中的元素
print(arr[1:4]) # 输出: [2 3 4]
3.2. 多维数组的索引和切片
对于多维数组,可以使用多个索引或切片来获取数组中的元素。示例如下:
import numpy as np
# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 使用索引获取数组中的元素
print(arr[0, 1]) # 输出: 2
# 使用切片获取数组中的元素
print(arr[:, 1:]) # 输出:
# [[2 3]
# [5 6]]
4. 数组的数学运算
NumPy提供了丰富的数学运算函数,可以对数组进行各种数学运算。
4.1. 数组的加法和减法
我们可以使用+
和-
运算符对数组进行加法和减法运算,该运算符会逐元素进行运算。示例如下:
import numpy as np
# 创建两个数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 数组的加法运算
print(arr1 + arr2) # 输出: [5 7 9]
# 数组的减法运算
print(arr1 - arr2) # 输出: [-3 -3 -3]
4.2. 数组的乘
import numpy as np
# 创建两个数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 数组的乘法运算
print(arr1 * arr2) # 输出: [4 10 18]
# 数组的除法运算
print(arr1 / arr2) # 输出: [0.25 0.4 0.5 ]
4.3. 数组的矩阵运算
如果需要进行矩阵运算,可以使用numpy.dot()
函数或者ndarray.dot()
方法。示例如下:
import numpy as np
# 创建两个矩阵
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 矩阵的乘法运算
print(np.dot(arr1, arr2))
# 输出:
# [[19 22]
# [43 50]]
5. 数组的操作
NumPy提供了丰富的数组操作函数,可以对数组进行各种操作。
5.1. 数组的形状操作
我们可以使用ndarray.shape
属性获取数组的形状信息,使用ndarray.reshape(shape)
方法改变数组的形状。示例如下:
import numpy as np
# 创建一个三维数组
arr = np.arange(0, 24).reshape((2, 3, 4))
# 获取数组的形状
print(arr.shape) # 输出: (2, 3, 4)
# 改变数组的形状
arr = arr.reshape((4, 6))
print(arr)
# 输出:
# [[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]
# [18 19 20 21 22 23]]
5.2. 数组的转置操作
我们可以使用ndarray.T
属性获得数组的转置矩阵。示例如下:
import numpy as np
# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 获取数组的转置矩阵
print(arr.T)
# 输出:
# [[1 4]
# [2 5]
# [3 6]]
5.3. 数组的拼接操作
我们可以使用numpy.concatenate((a1, a2, ...), axis=0)
函数将多个数组沿着指定轴进行拼接。示例如下:
import numpy as np
# 创建两个一维数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 拼接两个一维数组
arr = np.concatenate((arr1, arr2))
print(arr) # 输出: [1 2 3 4 5 6]
5.4. 数组的排序操作
我们可以使用ndarray.sort(axis=-1, kind='quicksort', order=None)
方法来对数组进行排序。示例如下:
import numpy as np
# 创建一个一维数组
arr = np.array([3, 2, 1])
# 对数组进行排序
arr.sort()
print(arr) # 输出: [1 2 3]
总结
本文介绍了NumPy的基本操作,包括数组的创建、索引和切片、数学运算、数组操作等。通过学习这些基本操作,我们可以更好地使用NumPy进行科学计算和数据分析。