【深度学习】 Python 和 NumPy 系列教程(十一):NumPy详解:3、数组数学(元素、数组、矩阵级别的各种运算)

目录

一、前言

二、实验环境

三、NumPy

0、多维数组对象(ndarray)

多维数组的属性

1、创建数组

2、数组操作

3、数组数学

[1. 元素级别](#1. 元素级别)

[a. 直接运算](#a. 直接运算)

[b. 加法:np.add()函数](#b. 加法:np.add()函数)

[c. 减法:np.subtract()函数](#c. 减法:np.subtract()函数)

[d. 乘法:np.multiply()函数](#d. 乘法:np.multiply()函数)

[e. 除法:np.divide()函数](#e. 除法:np.divide()函数)

[f. 幂运算:np.power()函数](#f. 幂运算:np.power()函数)

[g. 取余与求商:](#g. 取余与求商:)

[2. 数组级别](#2. 数组级别)

[a. 平均值:np.mean()](#a. 平均值:np.mean())

[b. 最大值和最小值:np.max()、np.min()](#b. 最大值和最小值:np.max()、np.min())

[c. 求和:np.sum()](#c. 求和:np.sum())

[d. 标准差和方差:np.std()、np.var()](#d. 标准差和方差:np.std()、np.var())

[3. 矩阵级别](#3. 矩阵级别)

[a. 矩阵乘法](#a. 矩阵乘法)

[b. 矩阵转置](#b. 矩阵转置)

[c. 矩阵求逆](#c. 矩阵求逆)

[d. 行列式](#d. 行列式)

[e. 特征值和特征向量](#e. 特征值和特征向量)

[f. 矩阵的迹](#f. 矩阵的迹)

[g. 点积](#g. 点积)

[4. 其他数学函数](#4. 其他数学函数)

[a. 三角函数](#a. 三角函数)

[b. 指数和对数函数](#b. 指数和对数函数)

[c. 取整函数](#c. 取整函数)

[d. 绝对值](#d. 绝对值)

[e. 累加和和累积](#e. 累加和和累积)


一、前言

Python是一种高级编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名,并且具有强大的功能和广泛的应用领域。Python具有丰富的标准库和第三方库,可以用于开发各种类型的应用程序,包括Web开发、数据分析、人工智能、科学计算、自动化脚本等。

Python本身是一种伟大的通用编程语言,在一些流行的库(numpy,scipy,matplotlib)的帮助下,成为了科学计算的强大环境。本系列将介绍Python编程语言和使用Python进行科学计算的方法,主要包含以下内容:

  • Python:基本数据类型、容器(列表、元组、集合、字典)、函数、类
  • Numpy:数组创建、数组操作、数组数学、广播
  • Matplotlib:绘图,子图,图像
  • IPython:创建笔记本,典型工作流程

二、实验环境

|--------|--------|---|
| numpy | 1.21.6 | |
| python | 3.7.16 | |

  • 运行下述命令检查Python版本
bash 复制代码
 python --version 
  • 运行下述代码检查Python、NumPy版本
python 复制代码
import sys
import numpy as np

print("Python 版本:", sys.version)
print("NumPy 版本:", np.__version__)

三、NumPy

NumPy(Numerical Python)是一个用于科学计算的Python库。它提供了一个强大的多维数组对象(ndarray),用于进行高效的数值运算和数据处理。Numpy的主要功能包括:

  1. 多维数组:Numpy的核心是ndarray对象,它是一个多维数组,可以存储同类型的元素。这使得Numpy非常适合处理向量、矩阵和其他多维数据结构。

  2. 数学函数:Numpy提供了许多常用的数学函数,如三角函数、指数函数、对数函数等。这些函数可以直接应用于整个数组,而无需编写循环。

  3. 广播(Broadcasting):Numpy支持不同形状的数组之间的运算,通过广播机制,可以对形状不同的数组进行逐元素的操作,而无需显式地编写循环。

  4. 线性代数运算:Numpy提供了丰富的线性代数运算函数,如矩阵乘法、求解线性方程组、特征值计算等。

  5. 随机数生成:Numpy包含了用于生成各种概率分布的随机数的函数,如均匀分布、正态分布、泊松分布等。

  6. 数据操作:Numpy提供了很多用于操作数组的函数,如切片、索引、排序、去重等。

Numpy广泛应用于科学计算、数据分析、机器学习等领域。它的高效性和便捷性使得它成为Python数据科学生态系统中不可或缺的组成部分。

0、多维数组对象(ndarray)

NumPy的ndarray对象是NumPy库中最重要的对象之一,也是进行科学计算的核心数据结构。ndarray代表了一个多维的数组,可以存储相同类型的元素。

多维数组的属性

  • ndarray.shape:返回表示数组形状的元组,例如(2, 3)表示2行3列的数组。
  • ndarray.dtype:返回数组中元素的数据类型,例如intfloatbool等。
  • ndarray.ndim:返回数组的维度数,例如1表示一维数组,2表示二维数组。

1、创建数组

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501

2、数组操作

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501

3、数组数学

1. 元素级别

NumPy提供了许多在数组元素级别进行数学运算的函数,例如加法、减法、乘法、除法、幂运算等。这些函数会对数组中的每个元素进行相应的数学计算,并返回一个新的数组作为结果。

a. 直接运算

python 复制代码
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 加法
result = arr1 + arr2
print(result)  # 输出: [5 7 9]

# 减法
result = arr1 - arr2
print(result)  # 输出: [-3 -3 -3]

# 乘法
result = arr1 * arr2
print(result)  # 输出: [4 10 18]

# 除法
result = arr1 / arr2
print(result)  # 输出: [0.25 0.4  0.5]

b. 加法:np.add()函数

python 复制代码
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 数组元素级别的加法
result = np.add(arr1, arr2)
print(result)

输出:

python 复制代码
[5 7 9]

c. 减法:np.subtract()函数

python 复制代码
import numpy as np

arr1 = np.array([4, 5, 6])
arr2 = np.array([1, 2, 3])

# 数组元素级别的减法
result = np.subtract(arr1, arr2)
print(result)

输出:

python 复制代码
[3 3 3]
复制代码

d. 乘法:np.multiply()函数

python 复制代码
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 数组元素级别的乘法
result = np.multiply(arr1, arr2)
print(result)

输出:

python 复制代码
[ 4 10 18]
复制代码

e. 除法:np.divide()函数

python 复制代码
import numpy as np

arr1 = np.array([4, 6, 8])
arr2 = np.array([2, 3, 4])

# 数组元素级别的除法
result = np.divide(arr1, arr2)
print(result)

输出:

python 复制代码
[2. 2. 2.]
复制代码

f. 幂运算:np.power()函数

python 复制代码
import numpy as np

arr = np.array([1, 2, 3])

# 数组元素级别的幂运算
result = np.power(arr, 2)
print(result)

输出:

python 复制代码
[1 4 9]

g. 取余与求商:

python 复制代码
import numpy as np

arr1 = np.array([7, 8, 9])
arr2 = np.array([2, 3, 4])

# 数组的取余
result = np.mod(arr1, arr2)
print(result)  # 输出: [1 2 1]

# 数组的求商
result = np.divmod(arr1, arr2)
print(result)  # 输出: (array([3, 2, 2]), array([1, 2, 1]))

2. 数组级别

a. 平均值:np.mean()

python 复制代码
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的平均值
mean_value = np.mean(arr)
print(mean_value)

输出:

python 复制代码
3.0
复制代码

b. 最大值和最小值:np.max()np.min()

使用np.max()np.min()函数分别计算数组的最大值和最小值。

python 复制代码
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的最大值和最小值
max_value = np.max(arr)
min_value = np.min(arr)

print(max_value, min_value)

输出:

python 复制代码
5 1

c. 求和:np.sum()

计算数组所有元素的和

python 复制代码
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的元素和
sum_value = np.sum(arr)
print(sum_value)

输出:

python 复制代码
15

d. 标准差和方差:np.std()np.var()

使用np.std()np.var()函数计算数组的标准差和方差

python 复制代码
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的标准差和方差
std_value = np.std(arr)
var_value = np.var(arr)

print(std_value, var_value)

输出:

python 复制代码
1.4142135623730951 2.0

3. 矩阵级别

a. 矩阵乘法

python 复制代码
import numpy as np

matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

# 矩阵乘法
result = np.matmul(matrix1, matrix2)
# 或者使用 @ 运算符
# result = matrix1 @ matrix2

print(result)

输出结果为:

python 复制代码
[[19 22]
 [43 50]]

b. 矩阵转置

python 复制代码
import numpy as np

matrix5 = np.array([[1, 2], [3, 4]])
result = np.transpose(matrix5)
# 或者使用 .T 属性
# result = matrix5.T
print(result)

转置结果:

python 复制代码
[[1 3]
[2 4]]

c. 矩阵求逆

python 复制代码
import numpy as np


matrix6 = np.array([[1, 2], [3, 4]])
result = np.linalg.inv(matrix6)
print(result)

求逆结果为:

python 复制代码
[[-2. 1. ]
[ 1.5 -0.5]]

d. 行列式

python 复制代码
import numpy as np

matrix7 = np.array([[1, 2], [3, 4]])
result = np.linalg.det(matrix7)
print(result)

行列式结果:

python 复制代码
-2.0000000000000004

e. 特征值和特征向量

python 复制代码
import numpy as np

matrix8 = np.array([[1, 2], [3, 4]])
eigenvalues, eigenvectors = np.linalg.eig(matrix8)
print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)

输出:

python 复制代码
特征值: [-0.37228132 5.37228132]
特征向量: [[-0.82456484 -0.41597356]

f. 矩阵的迹

python 复制代码
import numpy as np

matrix9 = np.array([[1, 2], [3, 4]])
result = np.trace(matrix9)
print(result)

输出:

python 复制代码
5

g. 点积

向量的点积是指两个向量对应位置的元素相乘后再求和的运算。

python 复制代码
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 使用 np.dot 函数计算向量的点积
result = np.dot(arr1, arr2)
print(result)  # 输出: 32

# 使用数组对象的 dot 方法计算向量的点积
result = arr1.dot(arr2)
print(result)  # 输出: 32

4. 其他数学函数

a. 三角函数

python 复制代码
import numpy as np

arr = np.array([0, np.pi/2, np.pi])

# 正弦函数
result = np.sin(arr)
print(result)  # 输出: [0. 1. 0.]

# 余弦函数
result = np.cos(arr)
print(result)  # 输出: [1. 0. -1.]

# 正切函数
result = np.tan(arr)
print(result)  # 输出: [0. 无穷大 -0.]

b. 指数和对数函数

python 复制代码
import numpy as np

arr = np.array([1, 2, 3])

# 指数函数
result = np.exp(arr)
print(result)  # 输出: [2.71828183 7.3890561  20.08553692]

# 自然对数
result = np.log(arr)
print(result)  # 输出: [0. 0.69314718 1.09861229]

# 以2为底的对数
result = np.log2(arr)
print(result)  # 输出: [0. 1. 1.5849625]

c. 取整函数

python 复制代码
import numpy as np

arr = np.array([1.4, 2.7, 4.1])

# 向下取整
result = np.floor(arr)
print(result)  # 输出: [1. 2. 4.]

# 向上取整
result = np.ceil(arr)
print(result)  # 输出: [2. 3. 5.]

# 四舍五入
result = np.round(arr)
print(result)  # 输出: [1. 3. 4.]

d. 绝对值

python 复制代码
import numpy as np

arr = np.array([-1, -2, 3, -4, 5])

# 数组元素的绝对值
result = np.abs(arr)
print(result)  # 输出: [1 2 3 4 5]

e. 累加和和累积

python 复制代码
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 累加和
result = np.cumsum(arr)
print(result)  # 输出: [ 1  3  6 10 15]

# 累积积
result = np.cumprod(arr)
print(result)  # 输出: [  1   2   6  24 120]
相关推荐
强哥之神9 分钟前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai
yusaisai大鱼12 分钟前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow
18号房客13 分钟前
一个简单的深度学习模型例程,使用Keras(基于TensorFlow)构建一个卷积神经网络(CNN)来分类MNIST手写数字数据集。
人工智能·深度学习·机器学习·生成对抗网络·语言模型·自然语言处理·tensorflow
Biomamba生信基地16 分钟前
R语言基础| 功效分析
开发语言·python·r语言·医药
神秘的土鸡20 分钟前
神经网络图像隐写术:用AI隐藏信息的艺术
人工智能·深度学习·神经网络
数据分析能量站21 分钟前
神经网络-LeNet
人工智能·深度学习·神经网络·机器学习
Jaly_W29 分钟前
用于航空发动机故障诊断的深度分层排序网络
人工智能·深度学习·故障诊断·航空发动机
CodeClimb31 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
夜幕龙38 分钟前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
晚夜微雨问海棠呀1 小时前
长沙景区数据分析项目实现
开发语言·python·信息可视化