NumPy基础知识
NumPy是一个开源的Python库,主要用于科学计算和数据分析。它提供了一个高效的多维数组对象(ndarray),以及一系列用于数组计算的函数和工具。本文将介绍NumPy的一些基础知识,包括数组的创建、索引、切片、运算等。
NumPy 常用的应用场景。
- 科学计算
NumPy 在科学计算领域有着广泛的应用。例如,在物理学、统计学、金融学、计算机视觉等领域,都需要用到数值计算和数组操作,而 NumPy 提供了高效的计算和操作工具,能够大大提高科学计算的效率和精度。 - 数据处理
在数据处理过程中,常常需要对大量的数据进行处理和分析。NumPy 提供了一系列的数组操作和函数,可以帮助用户高效地进行数据处理和分析。例如,可以使用 NumPy 来进行数据的统计、聚合、筛选等操作。 - 机器学习
在机器学习领域,NumPy 也有着广泛的应用。例如,在机器学习算法中,常常需要使用矩阵运算、线性代数等数学知识,而 NumPy 提供了高效的矩阵运算和线性代数工具,能够大大提高机器学习算法的效率和精度。 - 图像处理
在计算机视觉领域,图像处理是一个重要的研究方向。NumPy 提供了一系列的数组操作和函数,可以帮助用户高效地进行图像处理和分析。例如,可以使用 NumPy 来对图像进行滤波、边缘检测、特征提取等操作。
总之,NumPy 具有广泛的应用场景,可以应用于科学计算、数据处理、机器学习、图像处理等各个领域,为用户提供高效的数值计算和数组操作工具。
Numpy基础
数组的创建
数组是NumPy中最基本的对象,它可以是一维、二维或更高维的。下面是一些创建数组的方法:
import numpy as np
# 从列表创建一维数组
a = np.array([1, 2, 3, 4, 5])
print(a) # [1 2 3 4 5]
# 从嵌套列表创建二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
# [[1 2 3]
# [4 5 6]]
# 创建全0数组
c = np.zeros((2, 3))
print(c)
# [[0. 0. 0.]
# [0. 0. 0.]]
# 创建全1数组
d = np.ones((3, 2))
print(d)
# [[1. 1.]
# [1. 1.]
# [1. 1.]]
# 创建随机数组
e = np.random.rand(2, 3)
print(e)
# [[0.36568187 0.29512524 0.79009645]
# [0.06822407 0.30649187 0.17903423]]
数组的索引和切片
数组的索引和切片与Python列表类似,但是有一些额外的功能。下面是一些示例:
import numpy as np
# 一维数组索引
a = np.array([1, 2, 3, 4, 5])
print(a[0]) # 1
print(a[-1]) # 5
# 二维数组索引
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b[0, 1]) # 2
print(b[1, 2]) # 6
# 数组切片
c = np.array([1, 2, 3, 4, 5])
print(c[:3]) # [1 2 3]
print(c[3:]) # [4 5]
print(c[1:4]) # [2 3 4]
# 多维数组切片
d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(d[:2, 1:]) # [[2 3]
# [5 6]]
数组的运算
NumPy提供了一系列用于数组运算的函数和工具。下面是一些示例:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 加法
print(a + b) # 输出 [5, 7, 9]
# 减法
print(a - b) # 输出 [-3, -3, -3]
# 乘法
print(a * b) # 输出 [4, 10, 18]
# 除法
print(b / a) # 输出 [4., 2.5, 2.]
# 求幂
print(a ** 2) # 输出 [1, 4, 9]
NumPy也提供了许多数学函数,包括sin、cos、tan、log等等。以下是一些示例:
a = np.array([0, np.pi/2, np.pi])
# sin函数
print(np.sin(a)) # 输出 [0. 1. 0.]
# cos函数
print(np.cos(a)) # 输出
Numpy 形状操作
改变形状: reshape
reshape函数可以将数组改变为指定的形状。例如,将一个一维数组改为二维数组:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3)
print(b) # 输出 array([[1, 2, 3], [4, 5, 6]])
flatten
flatten函数可以将一个多维数组转换为一维数组。
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.flatten()
print(b) # 输出 array([1, 2, 3, 4, 5, 6])
ravel
ravel函数也可以将一个多维数组转换为一维数组,与flatten不同的是,ravel返回的是原数组的一个视图(view),即对原数组的修改会影响到返回的数组。
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.ravel()
print(b) # 输出 array([1, 2, 3, 4, 5, 6])
堆叠数组
numpy中可以使用concatenate、stack和hstack、vstack函数将多个数组堆叠起来。
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
c = np.concatenate((a, b), axis=0)
print(c) #输出 array([[1, 2],[3, 4],[5, 6]])
stack
stack函数将多个数组按新的维度堆叠起来。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.stack((a, b), axis=0)
print(c) # 输出 array([[1, 2, 3], [4, 5, 6]])
hstack
hstack函数将多个数组水平堆叠起来。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.hstack((a, b))
print(c) #输出 array([1, 2, 3, 4, 5, 6])
vstack
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) # 输出 array([[1, 2], [3, 4],[5, 6],[7, 8]])
hsplit
hsplit函数可以将一个数组沿着水平方向切分成多个子数组,其中每个子数组的行数必须相同。
import numpy as np
# 定义一个数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 水平切分
b, c = np.hsplit(a, 2)
print(b)
print(c)
# 输出
array([[1, 2],
[4, 5],
[7, 8]])
array([[3],
[6],
[9]])
可以看到,hsplit() 将一个数组沿着水平方向切分成了两个子数组,其中第一个子数组包含每行的前两个元素,第二个子数组包含每行的最后一个元素。
需要注意的是,hsplit() 只能按照列的数量进行切分,不能按照行的数量进行切分。如果需要按照行的数量进行切分,可以使用 split() 函数
结语
本篇博客只是简单介绍了Numpy的基础操作,关于Numpy高级用法,会在后面介绍,