Python NumPy教程之数组的基本操作详解
NumPy是Python中用于科学计算的一个重要库,它提供了高效的多维数组对象和各种派生对象,以及用于数组的函数。本文将详细讲解NumPy中数组的基本操作,包括数组的创建、索引和切片、数组的运算、数组的拼接和重塑、数组的转置等。
数组的创建
在NumPy中,可以使用np.array()
函数创建数组。下面是一个示例:
import numpy as np
# 创建一个一维数组
a = np.array([1, 2, 3, 4, 5])
# 创建一个二维数组
b = np.array([[1, , 3], [4, 5, 6]])
# 创建一个三维数组
c = np.array([[[, 2], [3, 4]], [[5, 6], [7, 8]]])
# 打印结果
print(a)
print(b)
print(c)
在上面的示例中,我们分别使用np.array()
函数创建了一个一维数组a
、一个二维数组b
和一个三维数组c
。最后,使用print()
函数打印出了结果。
需要注意的是,使用np.array()
函数创建数组时,可以传入一个列表、元组或其他序列类型的对象作为参数。
数组的索引和切片
在NumPy中,可以使用索引和切片来访问数组中的元素。下面是一个示例:
import numpy as np
# 创建一个二维数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 访问数组中的元素
print(a[0, 0]) # 输出1
print(a[1, 1]) # 输出5
print(a[2, 0]) # 输出7
# 对数组进行切片
print(a[0:2, 0:2]) # 输出[[1, 2], [4, 5]]
print(a[1:, :2]) # 输出[[4, 5], [7, 8]]
在上面的示例中,我们首先使用np.array()
函数创建了一个二维数组a
,然后使用索引和切片访问了数组中的元素。最后,使用print()
函数打印出了结果。
需要注意的是,NumPy中的数组索引和切片与Python中的列表索引和切片类似,但有一些不同之处。例如,NumPy中的切片是原数组的一个视图,而不是副本,因此修改切片中的元素会影响原数组中的元素。
数组的运算
在NumPy中,可以对数组进行各种运算,包括加、减、乘、除、求幂等。下面是一个示例:
import numpy as np
# 创建两个数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 对数组进行运算
c = a + b
d = a - b
e = a * b
f = a / b
g = a ** 2
# 打印结果
print(c)
print(d)
print(e)
print(f)
print(g)
在上面的示例中,我们首先使用np.array()
函数创建了两个一维数组a
和b
,然后对它们进行了加、减、乘、除、求幂等运算,并将结果分别保存在变量c
、d
、e
、f
和g
中。最后,使用print()
函数打印出了结果。
需要注意的是,NumPy中的数组运算是按元素进行的,即对应位置的元素进行相应的运算。
数组的拼接和重塑
在NumPy中,可以使用堆叠方法将多个数组沿着不同的轴进行组合。本文将详细讲解NumPy中数组的堆叠方法,包括np.concatenate()
函数、np.vstack()
函数、np.hstack()
函数、np.dstack()
函数和np.stack()
函数。
np.concatenate()
函数
np.concatenate()
函数可以将多个数组沿着指定的轴进行拼接。下面是一个示例:
import numpy as np
# 创建两个数组
a = np.array([[1, 2], [3, 4]])
= np.array([[5,], [7, 8]])
# 沿着行轴拼接数组
c = np.concatenate((a, b), axis=0)
# 打印结果
print(c)
在上面的示例中,我们首先使用np.array()
函数创建了两个数组a
和b
,然后使用np.concatenate()
函数将它们沿着轴拼接成一个新的数组c
。最后,print()
函数打印出了结果。
np.vstack()
函数和np.hstack()
函数
np.vstack()
可以将多个数组沿着垂直方向(行方向)堆叠起来,np.hstack()
函数可以将多个数组沿着水平方向(列方向)堆叠起来。下面是两个示例:
示例一:使用np.vstack()
函数叠数组
import numpy as np
# 创建两个数组
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 沿着垂直方向堆叠数组
c = np.vstack((a, b))
# 打印结果
print(c)
在上面的示例中,首先使用np.array()
创建了两个数组a
和b
,然后使用np.vstack()
函数将它们沿着垂直方堆叠成一个新数组c
。最后,使用print()
函数打印出了结果。
示例二:使用np.hstack()
函数堆叠数组
import numpy as np
# 创建两数组
a = np.array([[1, 2], [3, 4]])
b = np([[5, 6], [7, 8]])
# 沿着水平方向堆叠数组
c = np.hstack((a, b))
# 打印结果
print(c)
在面的示例中,我们首先使用np.array()
函数创建了两个数组和b
,然后使用np.hstack()
函数将它们沿着水平方向堆叠成一个新的数组c
。最,使用print()
函数打印出了结果。
np.dstack()
函数
np.dstack()
函数可以将多个数组沿着深度方向(第三个维度)堆叠起来。下面一个示例:
import numpy as
# 创建两个数组
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 沿着深度方向堆叠数组
c = np.dstack((a, b))
# 打印结果
print(c)
在上面的示例中,我们首先使用np.array()
函数了两个数组a
和b
,然后使用npstack()
函数将它们沿着深度方向堆叠成一个新的数组c
。最后,使用print()
函数打印出了结果。
`np函数
np.stack()
函数可以将多个数组沿着新的轴进行堆叠。下面是一个示例:
import numpy as np
# 创建两个数组
a = np.array([[1, 2], [3, 4]])
b = np.array5, 6], [7, 8]])
# 沿着新的轴堆叠数组
c = np.stack((a, b), axis=2)
# 打印结果
print(c)
在上面的示例中,我们首先使用np.array()
函数创建了两个数组a
和b
,然后使用np.stack()
函数将它们沿着新的轴(第三个轴)进行堆叠成一个新数组c
。最后,print()
函数打印出了结果。
需要注意的是,使用np.stack()
函数堆叠数组时,需要指定堆叠的轴。
数组的重塑
在NumPy中,可以使用reshape()
对数组进行重塑,即改变数组的形状。reshape()
的用法如下:
import numpy as np
# 创建一个形状为(2, 3,4)的三维数组
a = np.arange(24).reshape(2, 3, 4)
# 打印结果
print(a)
在上的例中,我们首先使用np.arange()
函数创建了一个长度为24的一维数组,然后使用reshape()
函数将其重塑为形状为(2, 3, 4)
的三维数组,并将结果保存在变量a
中。最,使用print()
函数打印出结果。
需要注意的是,重塑后的数组元个数须与原数组元素个数相同,则会报错。
数组的转置
在NumPy中,可以使用transpose()
函数对数组进行转置,即数组行和列互换。`transpose函数的用法如下:
import numpy as np
# 创建一个形状为(2, 3)的二维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
# 对数组进行转置
b = a.transpose()
# 打印结果
print(a)
print)
在上面的示例中,我们首先使用np.array()
函数创建了一个形状为(2, 3)
的二维数组`,然后使用
transpose()函数对其进行转置,并将结果保存在变量
b中。最后,使用
print()函数打印出了原数组
a和转置后的
b`。
需要注意是转置后的数组与原数组共数据存储空间,因此修改其中一个数组的元素会影响另一个数组的元素。
示例:对三维数组进行转置
import numpy as np
# 创建一个形状为(2, 3, 4)的三维数组
a = np.arange(24).reshape(2, 3, 4)
# 对数组进行置
b = a.transpose((1, 0, 2))
# 打印结果
print(a)
print(b)
在上面的示例中,我们首先使用np.arange()
函数创建了一个长度为24的一维数组,然后使用reshape()
函数将其重塑为形状为(2 3, 4)
的三维数组,并将结果保存在变量a
。然后,使用transpose()
函数对其进行转置,并将结果保存在变量b
中。后,使用print()
函数打印出了原数组a
和置后的数组b
。
需要注意的是,使用transpose()
函数转置数组时,需要指定转置后的轴顺序。在上的示例中,我们指定了转置后的轴顺序为(1, 0, 2)
,即将原数组的第0个轴和1个轴互换。