NumPy数组基础

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数组,我们可以高效地处理各种数学和科学计算问题。

后端开发标签