首页 > 其他分享 >NumPy学习11

NumPy学习11

时间:2023-06-18 20:44:05浏览次数:40  
标签:11 arr numpy 矩阵 学习 np print NumPy dot

今天学习了NumPy线性代数

21, NumPy线性代数
numpy_test11.py :
import numpy as np

'''
21, NumPy线性代数
NumPy 提供了 numpy.linalg 模块,该模块中包含了一些常用的线性代数计算方法,
下面对常用函数做简单介绍:

NumPy线性代数函数
函数名称	    描述说明
dot	        两个数组的点积。
vdot	    两个向量的点积。
inner	    两个数组的内积。
matmul	    两个数组的矩阵积。
det	        计算输入矩阵的行列式。
solve	    求解线性矩阵方程。
inv	        计算矩阵的逆矩阵,逆矩阵与原始矩阵相乘,会得到单位矩阵。
'''
print("----21, NumPy线性代数----")
'''
(1) numpy.dot()
按照矩阵的乘法规则,计算两个矩阵的点积运算结果。
当输入一维数组时返回一个结果值,若输入的多维数组则同样返回一个多维数组结果。
'''
print("----(1) numpy.dot()----")
# 输入一维数组
arr_A = [1, 2, 3]
arr_B = [4, 5, 6]
print('np.dot(arr_A, arr_B) : ', np.dot(arr_A, arr_B))
'''
np.dot(arr_A, arr_B) :  32
'''
# 输入二维数组时
arr_a = np.array([[50, 100], [24, 12]])
print('arr_a : ', arr_a)
arr_b = np.array([[10, 20], [16, 28]])
print('arr_b : ', arr_b)
arr_dot = np.dot(arr_a, arr_b)
print('arr_dot : ', arr_dot)
'''
arr_a :  [[ 50 100]
          [ 24  12]]
arr_b :  [[10 20]
          [16 28]]
arr_dot :  [ [2100 3800]
             [ 432  816]]
'''

'''
(2) numpy.vdot()
该函数用于计算两个向量的点积结果,与 dot() 函数不同。
'''
print("----(1) numpy.dot()----")
# 输入一维数组
arr_a = np.array([[50, 100], [24, 12]])
print('arr_a : ', arr_a)
arr_b = np.array([[10, 20], [16, 28]])
print('arr_b : ', arr_b)
arr_vdot = np.vdot(arr_a, arr_b)
print('arr_vdot : ', arr_vdot)
'''
arr_a :  [[ 50 100]
          [ 24  12]]
arr_b :  [[10 20]
          [16 28]]
arr_vdot :  3220
'''

'''
(3) numpy.inner()
inner() 方法用于计算数组之间的内积。当计算的数组是一维数组时,它与 dot() 函数相同,
若输入的是多维数组则两者存在不同.
'''
print("----(3) numpy.inner()----")
arr_a = [[1, 10], [100, 1000]]
print('arr_a : ', arr_a)
arr_b = [[1, 2], [3, 4]]
print('arr_b : ', arr_b)
# inner函数
print('np.inner(arr_a, arr_b) : ', np.inner(arr_a, arr_b))
# dot函数
print('np.dot(arr_a, arr_b) : ', np.dot(arr_a, arr_b))
'''
arr_a :  [[1, 10], [100, 1000]]
arr_b :  [[1, 2], [3, 4]]
inner() 函数的计算过程是 A 数组的每一行与 B 数组的每一行相乘再相加
np.inner(arr_a, arr_b) :  [[  21   43]
                           [2100 4300]]
dot() 则表示是 A 数组每一行与 B 数组的每一列相乘。
np.dot(arr_a, arr_b) :  [[  31   42]
                         [3100 4200]]
'''

'''
(4) numpy.matmul()
该函数返回两个矩阵的乘积,假如两个矩阵的维度不一致,就会产生错误。
'''
print("----(4) numpy.matmul()----")
arr_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print('arr_a : ', arr_a)
arr_b = np.array([[23, 23, 12], [2, 1, 2], [7, 8, 9]])
print('arr_b : ', arr_b)
arr_mul = np.matmul(arr_a, arr_b)
print('arr_mul : ', arr_mul)
'''
arr_a : [[1 2 3]
         [4 5 6]
         [7 8 9]]
arr_b : [[23 23 12]
         [ 2  1  2]
         [ 7  8  9]]
arr_mul :  [ [ 48  49  43]
             [144 145 112]
             [240 241 181]]
'''

'''
(5) numpy.linalg.det()
该函数使用对角线元素来计算矩阵的行列式,计算 2*2(两行两列) 的行列式。
通过对角线元素求行列式的结果(口诀:“一撇一捺”计算法):
1*4-2*3 = -2
'''
print("----(5) numpy.linalg.det()----")
arr_a = np.array([[1, 2], [3, 4]])
print('arr_a : ', arr_a)
print('np.linalg.det(arr_a) : ', np.linalg.det(arr_a))
'''
arr_a : [[1 2]
         [3 4]]
np.linalg.det(arr_a) :  -2.0000000000000004
'''

'''
(6) numpy.linalg.solve()
该函数用于求解线性矩阵方程组,并以矩阵的形式表示线性方程的解,如下所示:
3X  +  2 Y + Z =  10  
X + Y + Z = 6
X + 2Y - Z = 2
首先将上述方程式转换为矩阵的表达形式:
方程系数矩阵:
3   2   1 
1   1   1 
1   2  -1
方程变量矩阵:
X 
Y 
Z  
方程结果矩阵:
10 
6
2
如果用  m 、x、n 分别代表上述三个矩阵,其表示结果如下:
m*x=n 或 x=n/m
将系数矩阵与结果矩阵传递给 numpy.solve() 函数,即可求出线程方程的解,如下所示:
'''
print("----(6) numpy.linalg.solve()----")
arr_m = np.array([[3, 2, 1], [1, 1, 1], [1, 2, -1]])
print('数组 arr_m : ', arr_m)
arr_n = np.array([[10], [6], [2]])
print ('矩阵 arr_n:', arr_n)
print ('计算:arr_m^(-1)arr_n:')
arr_x = np.linalg.solve(arr_m, arr_n)
print('解 arr_x : ', arr_x)
'''
数组 arr_m :[[ 3  2  1]
             [ 1  1  1]
             [ 1  2 -1]]
矩阵 arr_n: [[10]
             [ 6]
             [ 2]]
计算:arr_m^(-1)arr_n:
解 arr_x :  [[1.]
             [2.]
             [3.]]
'''

'''
(7) numpy.linalg.inv()
该函数用于计算矩阵的逆矩阵,逆矩阵与原矩阵相乘得到单位矩阵。
'''
print("----((7) numpy.linalg.inv()----")
arr_a = np.array([[1,2],[3,4]])
print('原数组 arr_a : ', arr_a)
arr_b = np.linalg.inv(arr_a)
print("求逆   arr_b :", arr_b)
'''
原数组 arr_a :  [[1 2]
                 [3 4]]
求逆   arr_b : [[-2.   1. ]
                 [ 1.5 -0.5]]
'''

  

标签:11,arr,numpy,矩阵,学习,np,print,NumPy,dot
From: https://www.cnblogs.com/xh2023/p/17489726.html

相关文章

  • CMake官网教程学习
    简介本文档是根据CMake的官方教程学习的笔记,同时将教程中C++实现的代码更改为C语言实现。当前还未学习完。教程官网:CMakeTutorial—CMake3.27.0-rc1Documentation中文教程:教程—CMake3.26.4Documentation(cmake-doc.readthedocs.io)官方教程源码下载:https://cmake.o......
  • 强化学习中的随机化处理
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解4.1应用场景介绍4.2应用实例分析强化学习是人工智能领域的一个热门话题,它通过让机器代理通过与环境的互动来学习最优策略,以实现自主决策。在强化学习中,随机化处理是一个非常重要的概念,它可以帮助代理在......
  • 强化学习中的随机化处理与模拟实验
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解5.优化与改进强化学习是人工智能领域中的一个重要分支,它通过试错的方式训练模型,使其在不确定的环境下做出最优的决策。在强化学习中,随机化处理与模拟实验是非常重要的步骤,因为不确定的环境可能导致错误......
  • 机器翻译技术的发展趋势:从API到深度学习
    目录机器翻译技术的发展趋势:从API到深度学习随着全球化的发展,机器翻译技术在各个领域得到了广泛的应用。机器翻译技术的核心是将源语言文本翻译成目标语言文本,其中涉及到语言模型、文本生成模型和翻译模型等多个方面。在过去的几年中,随着深度学习技术的不断发展,机器翻译技术也经......
  • 机器学习算法的实现与优化
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解5.优化与改进6.结论与展望7.附录:常见问题与解答人工智能专家,程序员,软件架构师,CTO,以下是《48.机器学习算法的实现与优化》技术博客文章的文章结构:1.引言1.1.背景介绍机器学习技术的发展历程机......
  • 强化学习在情感分析中的应用
    目录强化学习在情感分析中的应用随着人工智能技术的发展,情感分析已成为计算机视觉领域的一个重要研究方向。情感分析是一种从图像或视频中识别人类情感或情感状态的方法,可以用于许多应用场景,如自然语言处理、智能推荐、医疗保健等。在情感分析中,强化学习算法被广泛应用,这是因为......
  • 机器学习中的神经网络:如何创建强大的模型并解决复杂的问题
    目录文章标题:《17."机器学习中的神经网络:如何创建强大的模型并解决复杂的问题"》文章背景介绍:随着人工智能技术的快速发展,神经网络已经成为机器学习领域中最受欢迎的模型之一。神经网络是一种基于深度学习的技术,能够通过多层神经元来学习和提取特征,从而实现复杂的分类、回归和......
  • 让机器更加人性化:深度学习技术在人工智能助手领域的应用
    目录随着人工智能技术的快速发展,人工智能助手领域逐渐成为人们日常生活的一部分。然而,对于如何设计和构建更加人性化、更加智能的人工智能助手,仍然存在着许多挑战。本文将介绍深度学习技术在人工智能助手领域的应用,通过具体实践案例,讲解如何使用深度学习技术来构建更加智能、更加......
  • 机器学习在金融领域的应用
    目录引言随着人工智能技术的不断发展,越来越多的领域开始应用机器学习技术。在金融领域,机器学习也得到了广泛的应用,特别是在风险管理、投资决策、客户服务等方面。本文将介绍机器学习在金融领域的应用,主要分为技术原理及概念、实现步骤与流程、应用示例与代码实现讲解、优化与改......
  • 机器学习算法在生物信息学中的应用
    目录2.技术原理及概念2.1基本概念解释2.2技术原理介绍3.实现步骤与流程3.1准备工作:环境配置与依赖安装3.2核心模块实现3.3集成与测试4.应用示例与代码实现讲解4.1应用场景介绍生物信息学是一门跨学科的科学,涵盖了生物统计学、生物信息学、计算机科学、统计学和数学等多......