1. NumPy数组是什么?
NumPy是Python中用于数值计算和科学计算的核心库之一,它提供了一个高性能的多维数组对象,称为ndarray
,以及用于对数组进行操作的许多函数和方法。NumPy数组是一个由相同类型的元素(通常是数字)组成的多维数组,可以在各种数学操作中使用。
1.1 NumPy数组的特点
NumPy数组是多维数组,也称为ND数组(N-dimensional array)。
NumPy数组元素的类型必须相同,通常是数字类型。
NumPy数组的每个维度称为一个轴(axes),轴的数量称为数组的秩(rank)。
NumPy数组可以表示和处理大量数据,它提供了许多强大的数组操作功能。
2. 创建NumPy数组
在NumPy中,我们可以使用多种方式来创建NumPy数组,包括从Python列表、元组、数组拷贝等方式。以下是一些常用的创建数组的方法。
2.1 从Python列表创建数组
我们可以使用numpy.array()
函数从Python列表创建数组。
示例:
import numpy as np
# 从Python列表创建一维数组
a = np.array([1, 2, 3])
print(a)
# 输出:[1 2 3]
# 从Python列表创建二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
# 输出:
# [[1 2 3]
# [4 5 6]]
我们还可以通过numpy.arange()
函数创建一维数组。
示例:
# 从范围内创建数组
c = np.arange(10)
print(c)
# 输出:[0 1 2 3 4 5 6 7 8 9]
2.2 其他创建数组的方式
除了从Python列表、范围内创建数组外,我们还可以使用以下方式创建NumPy数组。
numpy.zeros(shape, dtype=float)
:创建指定形状和类型的全0数组。
numpy.ones(shape, dtype=float)
:创建指定形状和类型的全1数组。
numpy.empty(shape, dtype=float)
:创建指定形状和类型的空数组,数组的元素为随机值。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
:将区间[start, stop]分为num个等分点,并返回这些点组成的数组。
示例:
# 创建全0数组
d = np.zeros((2, 3))
print(d)
# 输出:
# [[0. 0. 0.]
# [0. 0. 0.]]
# 创建全1数组
e = np.ones((2, 3))
print(e)
# 输出:
# [[1. 1. 1.]
# [1. 1. 1.]]
# 创建空数组
f = np.empty((2, 3))
print(f)
# 输出:
# [[4.67296746e-307 1.69121096e-306 7.56599789e-307]
# [3.56043053e-307 1.60220393e-306 1.89146896e-307]]
# 创建等分点数组
g = np.linspace(0, 1, 10)
print(g)
# 输出:[0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
# 0.66666667 0.77777778 0.88888889 1. ]
3. NumPy数组的基本操作
我们已经了解了NumPy数组的创建方式,接下来我们将介绍NumPy数组的基本操作。
3.1 数组的属性
在创建数组时,数组的一些属性如形状、元素类型等已经确定了,我们可以通过以下属性来查看这些信息。
ndarray.shape
:返回是一个元组,表示NumPy数组在每个维度上的大小。
ndarray.dtype
:返回数组中元素的类型。
ndarray.ndim
:维度的数量。
ndarray.size
:元素的总数。
示例:
# 创建二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
# 查看数组的形状
print(a.shape)
# 输出:(2, 3)
# 查看数组元素的类型
print(a.dtype)
# 输出:int64
# 查看数组的维度数量
print(a.ndim)
# 输出:2
# 查看数组元素的总数
print(a.size)
# 输出:6
3.2 数组的索引和切片
在访问和修改数组元素时,我们可以使用索引和切片。
索引:使用整数下标访问数组中单个元素。
切片:使用一个范围指定所需的元素。
示例:
# 创建二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
# 使用索引访问数组元素
print(a[0, 0])
# 输出:1
# 使用切片访问数组元素
print(a[:, 1])
# 输出:[2 5]
3.3 数组的变形
我们可以使用ndarray.reshape()
函数来变形NumPy数组。该函数可以按任意形状变形数组,并返回一个新的变形后的数组,原数组不会被改变。
在变形时,我们需要保证变形前后的元素数量一致。
示例:
# 创建一维数组
a = np.arange(12)
print(a)
# 输出:[ 0 1 2 3 4 5 6 7 8 9 10 11]
# 将一维数组变形为二维数组
b = a.reshape((3, 4))
print(b)
# 输出:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
3.4 数组的拼接和分裂
我们将介绍NumPy数组的拼接和分裂操作。
拼接:numpy.concatenate()
函数可以将两个或多个数组沿着一个轴拼接在一起。
分裂:将一个数组分裂为两个或多个数组,使用numpy.split()
、numpy.hsplit()
和numpy.vsplit()
函数。分别表示按指定轴分裂、水平分裂和垂直分裂。
示例:
# 创建两个一维数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 沿着第0个轴拼接两个数组
c = np.concatenate((a, b))
print(c)
# 输出:[1 2 3 4 5 6]
# 创建一个二维数组
d = np.array([[1, 2], [3, 4]])
# 按第0个轴分裂数组
e, f = np.split(d, 2, axis=0)
print(e)
# 输出:
# [[1 2]]
print(f)
# 输出:
# [[3 4]]
4. NumPy数组的数学操作
NumPy数组支持各种数学运算和计算操作。注意,这些操作通常是向量化的,因此能够在整个数组上执行快速运算。
4.1 数组的基本数学运算
我们可以像Python内置类型一样进行基本数学计算,例如加、乘等。
示例:
# 创建两个一维数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 数组的加法
c = a + b
print(c)
# 输出:[5 7 9]
# 数组的乘法
d = a * b
print(d)
# 输出:[ 4 10 18]
4.2 数组的统计运算
NumPy也提供了许多常见的统计函数,例如计算平均值、标准差等。
ndarray.sum()
:计算数组中所有元素的总和。
ndarray.mean()
:计算数组平均值。
ndarray.std()
:计算数组标准差。
ndarray.min()
:返回数组中最小值。
ndarray.max()
:返回数组中最大值。
ndarray.argmax()
:返回数组中最大值的索引。
ndarray.argmin()
:返回数组中最小值的索引。
示例:
# 创建一维数组
a = np.array([1, 2, 3])
# 计算数组所有元素的总和
print(a.sum())
# 输出:6
# 计算数组的平均值
print(a.mean())
# 输出:2.0
# 计算数组的标准差
print(a.std())
# 输出:0.816496580927726
5. 总结
本文介绍了NumPy数组的创建、基本操作、数学运算和统计运算等方面。NumPy数组是在Python进行科学计算和数值计算的重要工具,通过使用NumPy数组,我们可以高效地处理各种数学和科学计算问题。