当前位置: 首页 > news >正文

python中使用numpy包的向量矩阵相乘

一直对np的线性运算不太清晰,正好上课讲到了,做一个笔记整个理解一下 

1.向量和矩阵

在numpy中,一重方括号表示的是向量vector,vector没有行列的概念。二重方括号表示矩阵matrix,有行列。

 

代码显示如下:

import numpy as np
a=np.array([1,2,3])
a.shape
#(3,)
b=np.array([[1,2,3],[3,4,5]])
b.shape
#(2, 3)
c=np.array([[1],[2],[3]])
c.shape
#(3, 1)

即使[1,2,3]、[[1,2,3]]看起来内容一样 使用过程中也会有完全不一样的变化。下面以向量乘法为例解释。

2.向量和向量乘法

1.* 对应对应位置相乘

普通的*:在numpy里表示普通的对应位置相乘,注意相乘的两个向量、矩阵要保证维数相同

a1=np.array([1,2,3])
a2=np.array([1,2,3])
a1*a2
#array([1, 4, 9])b1=np.array([[1,2,3]])
b2=np.array([[1,2,3]])
b1*b2
#array([[1, 4, 9]])b1=np.array([[1,2,3],[3,4,5]])
b2=np.array([[1,2,3],[3,4,5]])
b1*b2
# array([[ 1,  4,  9],
#        [ 9, 16, 25]])

2.广播机制

如果单纯出现维数对不上,python会报error

b1=np.array([[1,2]])
b2=np.array([[1,2,3]])
b1*b2
#operands could not be broadcast together with shapes (1,2) (1,3) 

但是,还有一种情况会出现乘出来一个好大的矩阵,这个情况常出现在无意之中把行、列的数字搞反的情况下。被称为广播机制,需要两个乘子都有一个维数是1,如果是对不上且不为1就会报错

Numpy中的广播机制,你确定正确理解了吗? - 腾讯云开发者社区-腾讯云

在普通的对应位置相乘,会出现 

a1=np.array([1,2,3])
a3=np.array([[1],[2],[3]])
a1*a3#broadcast together
# array([[1, 2, 3],
#        [2, 4, 6],
#        [3, 6, 9]])

倒过来也会出现

a1=np.array([1,2,3])
a3=np.array([[1],[2],[3]])
a3*a1#broadcast together
# array([[1, 2, 3],
#        [2, 4, 6],
#        [3, 6, 9]])

3.向量点乘np.dot

必须要(行向量,列向量)形式的输入

a1=np.array([1,2,3])
a3=np.array([[1],[2],[3]])
np.dot(a3,a1)
#array([14])
#ValueError: shapes (3,1) and (3,) not aligned: 1 (dim 1) != 3 (dim 0)

 都是行向量,不行

b1=np.array([[1,2,3]])
b2=np.array([[1,2,3]])
np.dot(b1,b2) 
#shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

都是列向量,触发广播机制

a1=np.array([[1,2,3]])
a3=np.array([[1],[2],[3]])
np.dot(a3,a1)
# array([[1, 2, 3],
#        [2, 4, 6],
#        [3, 6, 9]])

3.矩阵和向量乘法

1.对应位置相乘

如果单纯采用*的方式进行矩阵和向量乘法,那就是广播机制

矩阵+向量

A1=np.array([[1,2,3],[2,3,4]])
b1=np.array([1,2,3])
A1*b1 #broadcast together
# array([[ 1,  4,  9],
#        [ 2,  6, 12]])

 对应的向量如果是矩阵形式,结果相同

A2=np.array([[1,2,3],[2,3,4]])
b2=np.array([[1,2,3]])
A2*b2 #broadcast together
# array([[ 1,  4,  9],
#        [ 2,  6, 12]])

相似的,如果维数对不上,不会触发广播机制

A3=np.array([[1,2,3],[2,3,4]])
b3=np.array([[1],[2],[3]])
A3*b3 #operands could not be broadcast together with shapes (2,3) (3,1) 

2.矩阵乘法

如果真正想要算矩阵*向量的矩阵乘法,要用np.dot

A4=np.array([[1,2,3],[2,3,4]])
b4=np.array([1,2,3])
np.dot(A4,b4)#dot product
#array([14, 20])

列向量也有类似结果

A4=np.array([[1,2,3],[2,3,4]])
b4=np.array([[1],[2],[3]])
np.dot(A4,b4)#dot product
# array([[14],
#        [20]])

4.矩阵矩阵乘法:

1.直接相乘

同样,也是对应位置相乘

A4=np.array([[1,2,3],[2,3,4]])
B4=np.array([[1,2,3],[4,5,6]])
A4*B4
# array([[ 1,  4,  9],
#        [ 8, 15, 24]])

 有广播机制

A4=np.array([[1,2,3],[2,3,4]])
B4=np.array([[1,2,3]])
A4*B4
# array([[ 1,  4,  9],
#        [ 2,  6, 12]])

2.np.dot:

需要第一个的列数和第二个的行数相对应

A4=np.array([[1,2,3],[2,3,4]])
B4=np.array([[1,2,3],[4,5,6]])
np.dot(A4,B4.T)
# array([[14, 32],
#        [20, 47]])A5=np.array([[1,2,3],[2,3,4]])
B5=np.array([[1,2,3],[4,5,6],[7,8,9]])
np.dot(A5,B5)
# array([[30, 36, 42],
#        [42, 51, 60]])

对不上会报错

A4=np.array([[1,2,3],[2,3,4]])
B4=np.array([[1,2,3],[4,5,6]])
np.dot(A4,B4)
# shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)

相关文章:

python中使用numpy包的向量矩阵相乘

一直对np的线性运算不太清晰,正好上课讲到了,做一个笔记整个理解一下 1.向量和矩阵 在numpy中,一重方括号表示的是向量vector,vector没有行列的概念。二重方括号表示矩阵matrix,有行列。 代码显示如下: …...

ElasticSearch 学习(一)

目录一、Elasticsearch 简介二、Elasticsearch 发展史三、Elasticsearch 功能四、Elasticsearch 特点五、Elasticsearch 应用场景一、Elasticsearch 简介 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据…...

【新】华为OD机试 - 交换字符(Python)| 刷完获取OD招聘渠道

交换字符 题目 给定一个字符串 S 变化规则: 交换字符串中任意两个不同位置的字符 M S 都是小写字符组成 1 <= S.length <= 1000 输入 一串小写字母组成的字符串 输出 按照要求变换得到最小字符串 示例一 输入 abcdef输出 abcdef示例二 输入 bcdefa输出 acde…...

手把手教你解决传说中的NPE空指针异常

1. 前言最近有好几个初学java的小伙伴&#xff0c;甚至是学习到了JavaWeb、框架阶段的小伙伴也跑来问壹哥&#xff0c;该如何解决Java中的NullPointerException空指针异常。因为NPE是初学者特别常见的典型异常&#xff0c;所以壹哥在这里专门写一篇文章&#xff0c;来手把手地教…...

【pytorch安装】conda安装pytorch无法安装cpu版本(完整解决过程)

问题描述 在安装pytorch过程中&#xff0c;发现最后验证torch时总是返回结果为False&#xff0c;结果翻上去发现自己安装的是cpu版本的。 然后又通过conda去更换不同版本尝试&#xff0c;发现都是cpu版本的。 问题分析 通过conda安装pytorch是从源中搜索匹配指令中的文件&am…...

云计算ACP云服务器ECS实例题库

&#x1f618;作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。&#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。&…...

面试题:作用域、变量提升、块级作用域、函数作用域、暂存性死区、var和let的区别

<script>var a 10;(function () {console.log(a)a 5console.log(window.a)var a 20;console.log(a)})() </script> 上述代码&#xff1a; 1、主要是涉及到变量提升和函数作用域&#xff0c;var a20这行代码会在函数作用域中提升var a 至最顶部&#xf…...

JAVA练习49-爬楼梯

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-爬楼梯 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 2月13日练习内容…...

深兰科技机器人商丘制造基地正式投产,助力商丘经济高质量发展

2月9日&#xff0c;深兰科技机器人商丘制造基地投产仪式在商丘市梁园区北航创新园隆重举行。商丘市人大常委会副主任、梁园区委书记张兵&#xff0c;梁园区区长薛天江、河南省装备制造业协会会长张桦&#xff0c;河南省机器人行业协会会长王济昌&#xff0c;深兰科技集团董事长…...

ES倒排索引/查询、写入流程

ES学习笔记 Elasticsearch学习笔记_巨輪的博客-CSDN博客 Elasticsearch学习之图解Elasticsearch中的_source、_all、store和index属性_BUse的博客-CSDN博客 倒排索引 倒排索引&#xff1a;ES倒排索引底层原理及FST算法的实现过程_es fst_Elastic开源社区的博客-CSDN博客 【…...

2023软考考哪个证书好?

软考有三个级别&#xff08;初级&#xff0c;中级和高级&#xff09;&#xff0c;这三个级别分别对应5个方向&#xff0c;下面这张图片呢&#xff0c;可以一目了然&#xff0c;一些小小建议&#xff01;&#xff01;&#xff01;遵循一个原则&#xff1a;首先选专业对口的科目&…...

一般人我劝你不要自学软件测试!!!

本人5年测试经验&#xff0c;在学测试之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说&#xff1a;自学软件测试&#xff0c;一般人我还是劝你算了吧&#xff1f;因为我就是那个一般人&#xff01; 软件测试基础真的很简单&…...

docker/docker-compose 安装mysql5.7

目录使用docker安装mysql5.7docker普通安装docker生产环境安装使用docker-compose 安装注意注意一:docker-compose权限问题注意二:docker pull 找不到镜像使用docker安装mysql5.7 docker普通安装 docker pull mysql:5.7 # 启动容器 docker run -p 3306:3306 --name mysql -e …...

【C++设计模式】学习笔记(6):Bridge 桥模式

目录 简介动机(Motivation)模式定义结构(Structure)要点总结笔记结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金…...

Allegro如何批量快速修改复用好的模块操作指导

Allegro如何批量快速修改复用好的模块操作指导 在做PCB设计的时候,相同模块可以用reuse复用的功能,可以大大提升效率,但是模块需要修改的时候,其它模块也要跟着修改,逐个再去复用一遍比较费时间,Allegro支持批量快速修改复用好的模块 前提是相同模块必须是相同的mdd文件…...

让我百思不得其解的infer究竟是怎么推导类型的?

情景再现 有这么一个条件类型的基本语法: T extends U ? X : Y; 如果占位符类型U是一个可以被分解成几个部分的类型&#xff0c;譬如数组类型&#xff0c;元组类型&#xff0c;函数类型&#xff0c;字符串字面量类型等。这时候就可以通过infer来获取U类型中某个部分的类型。 …...

E8-怎么实现根据表单内容自动生成标题

背景 可能有些小伙伴看到这个话题&#xff0c;觉得非常简单&#xff0c;在发起人步骤设置标题可编辑&#xff0c;在有关的控件中设置事件去更新标题就可以了呗。但如果想要标题字段里包含编号呢&#xff0c;而编号是在具体路径的高级设置里设置的&#xff0c;在某个出口生成的…...

《c语言深度解剖》--一套非常经典的笔试题

学习完c语言&#xff0c;需要对所学知识进行一个检测&#xff0c;下面有一套笔试题&#xff0c; 你有四十分钟进行检测&#xff0c;每道题五分&#xff0c;严格要求自己打分。 根据作者原话&#xff1a;在没有何提示的情况下,如果能得满分,那你可以扔掉本书了,因为你的水平已经…...

【数据结构与算法】单调队列 | 单调栈

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…...

openh264解码h264视频帧主流程

一 解析一帧的入口int32_t WelsDecodeSlice (PWelsDecoderContext pCtx, bool bFirstSliceInLayer, PNalUnit pNalCur) {// 解码slicePDqLayer pCurDqLayer pCtx->pCurDqLayer;PFmo pFmo pCtx->pFmo;int32_t iRet;int32_t iNextMbXyIndex, iSliceIdc;PSlice pSlice &a…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...