NumPy基础知识

180 阅读5分钟

NumPy基础知识

NumPy是一个开源的Python库,主要用于科学计算和数据分析。它提供了一个高效的多维数组对象(ndarray),以及一系列用于数组计算的函数和工具。本文将介绍NumPy的一些基础知识,包括数组的创建、索引、切片、运算等。

NumPy 常用的应用场景。

  1. 科学计算
    NumPy 在科学计算领域有着广泛的应用。例如,在物理学、统计学、金融学、计算机视觉等领域,都需要用到数值计算和数组操作,而 NumPy 提供了高效的计算和操作工具,能够大大提高科学计算的效率和精度。
  2. 数据处理
    在数据处理过程中,常常需要对大量的数据进行处理和分析。NumPy 提供了一系列的数组操作和函数,可以帮助用户高效地进行数据处理和分析。例如,可以使用 NumPy 来进行数据的统计、聚合、筛选等操作。
  3. 机器学习
    在机器学习领域,NumPy 也有着广泛的应用。例如,在机器学习算法中,常常需要使用矩阵运算、线性代数等数学知识,而 NumPy 提供了高效的矩阵运算和线性代数工具,能够大大提高机器学习算法的效率和精度。
  4. 图像处理
    在计算机视觉领域,图像处理是一个重要的研究方向。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高级用法,会在后面介绍,