草庐IT

Python_Numpy库中各种矩阵基本运算(加、减、乘、点乘、点除、乘方、转置等)

昊虹AI笔记 2024-01-03 原文

Numpy中矩阵基本运算的实现。

目录

01-两个矩阵相加

示例代码如下:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype='int8')

B = np.array([[2, 3, 4],
              [5, 6, 7],
              [8, 9, 10]], dtype='int8')

C = A+B

运行结果如下:

02-矩阵与标量(常数)相加

示例代码如下:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype='int8')

b = 3

C = A+b

运行结果如下:

03-两个矩阵相减

示例代码如下:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype='int8')

B = np.array([[2, 3, 4],
              [5, 6, 7],
              [8, 9, 10]], dtype='int8')

C = B-A

运行结果如下:

04-矩阵与标量(常数)的减法运算

示例代码如下:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype='int8')

b = 3

C = b-A
D = A-b

运行结果如下:

05-求矩阵中每个元素的相反数

示例代码如下:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype='int8')

B = -A

运行结果如下:

06-矩阵元素乘法(点乘)

06-1 两种方法实现矩阵元素乘法(点乘)

实现元素乘法有两种方法,一是用乘号,二是用函数multiply()。
下面的示例代码体现了这两种方法:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype='int8')

B = np.array([[2, 3, 4],
              [5, 6, 7],
              [8, 9, 10]], dtype='int8')

C = A*B  # 用乘号实现矩阵元素乘法
D = np.multiply(A, B)  # 用函数multiply()实现矩阵元素乘法

运行结果:

06-2-浮点数和unit8型矩阵做点乘的结果是什么数据类型的矩阵?

这里我们来探究一下,假如一个浮点数和unit8型矩阵做点乘会发生什么呢?

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]], dtype='uint8')

b = 0.7

C = np.multiply(A, b)

运行结果如下:


可以Numpy在运算时是以保证精度为优先的,所以矩阵C的数据类型被转换为了float64型。

07-矩阵乘法运算

矩阵乘法运算也有两种方式实现,示例代码如下:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]], dtype='int16')

B = np.array([[7, 8],
              [9, 10],
              [11, 12]], dtype='int16')

C = np.matmul(A, B)  # 第一种方法实现矩阵乘法

D = np.dot(A, B) # 第二种方法实现矩阵乘法[利用向量的点积(也称为数量积)实现]

运行结果如下:


要注意:方法二实际上是利用向量的点积(点乘/数量积)实现的,当然,它有局限性,它只适用于向量或二维矩阵。

08-矩阵元素乘方运算

以矩阵A中的元素为底数,矩阵B中的元素为指数,
示例代码如下:

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]], dtype='int16')

B = np.array([[6, 5, 4],
              [3, 2, 1]], dtype='int16')

C = A**B

运行结果如下:

09-矩阵的元素除法(点除)[也叫真除-结果既有整数部分也有小数部分]

有三种方法实现元素除法(点除),示例代码如下

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]], dtype='int16')

B = np.array([[2, 6, 12],
              [20, 30, 43]], dtype='int16')

C = B/A  # 第一种方法实现元素除法(点除)
D = np.true_divide(B, A)  # 第二种方法实现元素除法(点除)
F = np.divide(B, A)  # 第三种方法实现元素除法(点除)

运行结果如下:

10-矩阵的元素除法(点除)取余

有三种方法实现元素除法(点除)取余,示例代码如下

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]], dtype='int16')

B = np.array([[6, 6, 6],
              [6, 6, 6]], dtype='int16')

C = B % A  # 第一种方法实现元素除法(点除)取余
D = np.remainder(B, A)  # 第二种方法实现元素除法(点除)取余
E = np.mod(B, A)  # 第三种方法实现元素除法(点除)取余

运行结果如下:

11-矩阵的元素除法(点除)取整

有两种方法实现元素除法(点除)取整,示例代码如下

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]], dtype='int16')

B = np.array([[11, 11, 11],
              [11, 11, 11]], dtype='int16')

C = np.floor_divide(B, A)  # 第一种方法实现元素除法(点除)取整
D = B//A  # 第一种方法实现元素除法(点除)取整

12-矩阵的转置

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]], dtype='int16')

B = A.T

运行结果如下:

13-各种取整

13-1 四舍五入取整

可以用方法around()实现四舍五入取整

around(a, decimals=0, out=None)

参数decimals 为要保留的小数位数, 默认值为0。 如果为-1,将在个位上进行四舍五入,如果为-2,将在十位上进行四舍五入。示例代码及运行结果如下:

import numpy as np
 
n = np.array([-0.746, 4.6, 9.4, 7.447, 10.455, 11.555])
 
around1 = np.around(n)
print(around1)  # [ -1.   5.   9.   7.  10.  12.]
 
around2 = np.around(n, decimals=1)
print(around2)  # [ -0.7   4.6   9.4   7.4  10.5  11.6]
 
around3 = np.around(n, decimals=-1)
print(around3)  # [ -0.   0.  10.  10.  10.  10.]

13-2 向下取整

可以用方法floor()实现向下取整

示例代码及运行结果如下:

import numpy as np
 
n = np.array([-1.7, -2.5, -0.2, 0.6, 1.2, 2.7, 11])
 
floor = np.floor(n)
print(floor)  # [ -2.  -3.  -1.   0.   1.   2.  11.]

13-3 向上取整

可以用方法ceil()实现向上取整

示例代码及运行结果如下:

import numpy as np
 
n = np.array([-1.7, -2.5, -0.2, 0.6, 1.2, 2.7, 11])
 
ceil = np.ceil(n)
print(ceil)  # [ -1.  -2.  -0.   1.   2.   3.  11.]

延伸阅读:
归纳总结MATLAB中与矩阵运算有关的算术运算符(加、减、乘、除、点乘、点除、乘方、转置等)
OpenCV中的MAT类矩阵的各种基本运算及示例代码(加、减、乘、点乘、点除、乘方、累加、转置等)

有关Python_Numpy库中各种矩阵基本运算(加、减、乘、点乘、点除、乘方、转置等)的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  3. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  4. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  5. 旋转矩阵的几何意义 - 2

    点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度;     在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  8. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  9. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  10. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

随机推荐