MindSpore爱因斯坦求和约定API解析【mindspore.ops.Einsum】
官方文档写了个寂寞,既非中文也只有示例没有解释,这谁看得懂?总体而言,这个API功能强大,但是,撰写API文档技术有待提高哈。接下来是本人实际测试该API的结果:
符号和参数:
mindspore.ops.Einsum这个API是用于矩阵【也就是所谓的张量tensor】间运算的,它可以完成很多操作,例如矩阵相乘,为了满足这一需求,要求输入必须为tensor,也就说,可以支持矩阵和向量运算,但必须将向量a转化为矩阵[a],也就是1x1。
mindspore.ops.Einsum("{az/AZ},{.../az/AZ}->{az/AZ})
{az/AZ]}你只可以使用a~z及A~Z去代表tensor的维度
,作为一个分隔符,对每个tensor进行分割
->左边是输入维度,右边是你希望输出的维度
看不懂?没关系,下面例子你一看就懂!
实验前准备:
from mindspore import Tensor
import mindspore.numpy as np
from mindspore import ops
import mindspore
示例:
1.矩阵某一维度的相乘求和:
简单一维求和【乘数为1】
x = Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32)
einsum = ops.Einsum("i->")
#x为(3)的一维tensor,“i->”代表输入为(3)的一维数组,输出为()的零维数组
output = einsum([x])#这里的[]只是为了表示x为tensor,但去掉或者换()就会报错
print(output)
>>>[7.]
二维求和【乘数为1】
x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32)
einsum = ops.Einsum("ij->j")#(2,3)->(3),对应元素相加
output = einsum([x])
print(output)
>>>[5. 7. 9.]
维度对应数字相乘【加和为0】
x = Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32)
y = Tensor(np.array([2.0, 4.0, 3.0]), mindspore.float32)
einsum = ops.Einsum("i,i->i")#(3)和(3)的矩阵输出(3)
output = einsum((x, y))#x,y相同维度的对应元素相乘
print(output)
>>>[ 2. 8. 12.]
指定维度对应数字相乘再求和
x = Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32)
y = Tensor(np.array([2.0, 4.0, 3.0]), mindspore.float32)
einsum = ops.Einsum("i,i->")#(3)和(3)的矩阵输出()
output = einsum((x, y))#x,y相同维度的对应元素相乘再求和
print(output)
>>>[22.]
如何取理解什么时候求和,什么时候相加?简单来说,只要涉及到ab两个tensor,中间用“,”隔开,那么必定有相乘运算,根据你指定的维度再视情况进行加和运算。如果只有一个tensor,就不会有相乘运算
2矩阵相乘
矩阵相乘的特殊情况,也就是普普通通的矩阵相乘[a,b]*[b,c]=[a,c]
x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32)
y = Tensor(np.array([[2.0, 3.0], [1.0, 2.0], [4.0, 5.0]]), mindspore.float32)
einsum = ops.Einsum("ij,jk->ik")#(2,3),(3,2)->(2,2)
output = einsum((x, y))
print(output)
>>>[[16. 22.][37. 52.]]
x = Tensor(np.array([1.0, 2.0, 3.0]), mindspore.float32)
y = Tensor(np.array([2.0, 4.0, 1.0]), mindspore.float32)
einsum = ops.Einsum("j,i->ji")#(3),(3)->(3,3)实际上是自动填补了一个维度
#可以理解为(3,1),(1,3)->(3,3)
output = einsum((x, y))
print(output)
>>>[[ 2. 4. 1.][ 4. 8. 2.][ 6. 12. 3.]]
3矩阵的转置
x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32)
einsum = ops.Einsum("ij->ji")#矩阵的转置
output = einsum([x])
print(output)
>>>[[1. 4.][2. 5.][3. 6.]]
4省略号的运用
x = Tensor(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]), mindspore.float32)
einsum = ops.Einsum("...->")#...代表中间全部维度,在此处代表(2,3)
#本表达可以等同与"...j->","i...->"此用法在多维运算中可以常常使用
output = einsum([x])
print(output)
>>>[21.]
MindSpore爱因斯坦求和约定API解析【mindspore.ops.Einsum】相关推荐
- 【深度学习】爱因斯坦求和约定(einsum)
import tensorflow as tf print(tf.__version__) 2.0.0 一.爱因斯坦求和约定(einsum)的介绍 爱因斯坦求和约定是一种对复杂张量运算的优雅表达方式. ...
- np.einsum(爱因斯坦求和约定)
欢迎关注我的微信公号:小张Python einsum 全称 Einstein summation convention(爱因斯坦求和约定),用简单的方式来代表多维数组运算: 矩阵求各元素之和 A=∑i ...
- tf.einsum—爱因斯坦求和约定
1. einsum记法 如果你像我一样,发现记住PyTorch/TensorFlow中那些计算点积.外积.转置.矩阵-向量乘法.矩阵-矩阵乘法的函数名字和签名很费劲,那么einsum记法就是我们的救星 ...
- 一文掌握爱因斯坦求和约定 einsum
爱因斯坦跟 NumPy 有关系吗?没有,但他提出了一个针对数学公式的符号简化办法,即爱因斯坦求和约定(Einstein Summation Convention)或者叫爱因斯坦标记法(Einstein ...
- 爱因斯坦求和约定 含代码einsum
目录 一.简介 1.哑标 2.自由标 二.torch实现 1.计算迹 2.取矩阵对角线 3.计算外积 4.batch矩阵乘法 5.带有子列表和省略号 6.变换维度 7.双线性变换,类似于torch.n ...
- 爱因斯坦求和约定在Python扩展库Numpy中的实现
推荐教材: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,2020年1月出版,2021年12月第 ...
- python 笔记:爱因斯坦求和 einsum
1 einsum简介 使用爱因斯坦求和约定,可以以简单的方式表示许多常见的多维线性代数数组运算. 给定两个矩阵A和B,我们想对它们做一些操作,比如 multiply.sum或者transpose等.虽 ...
- einsum爱因斯坦求和(numpy)
0. 爱因斯坦求和约定(Einstein Notation) 在数学中,爱因斯坦求和约定是一种标记法,也称为Einstein Summation Convention,在处理关于坐标的方程式时十分有效 ...
- React16常用api解析以及原理剖析
React16常用api解析以及原理剖析 目录 Vue 与 React 两个框架的粗略区别对比 react 16 版本常见 api react 生命周期 react 事件机制 react.Compon ...
最新文章
- IIS配置跨服务器迁移
- python爬虫能干什么-总算发现python爬虫能够干什么
- xmpp整理笔记:xmppFramework框架的导入和介绍
- php jpg转换为pdf文件,php使用ImageMagick将PDF文件转换为JPG文件的方法_PHP
- 如何在jieba分词中加自定义词典_Pyspark Word2Vec + jieba 训练词向量流程
- mysql2005卸载步骤,二次安装mysql步骤
- 每天走6000步,血糖真的可以恢复正常吗?
- java商城项目_javaweb实战之商城项目开发(一)
- 争锋职考职称计算机,PVP攻略 | 新秀职业的争锋天下?
- 端口映射不能访问80端口
- java做一个客房管理系统定制_java实现客房管理系统
- 电脑网络适配器黄色感叹号,无法连接WiFi?显示适配器黄色小标?
- uva 571 Jugs
- Windows 日志安全审核
- JavaWeb实现生成二维码
- 如何实现一篇数据新闻报道
- 【新手提问导读】提问的艺术_提问的艺术
- ➢ 微信公众号运营教程(一)申请一个微信公众号
- 《精妙的IT》免费公开课
- 特斯拉Model Y 标准续航实测
热门文章
- 新闻系统开发摘要_每日新闻摘要:Microsoft提示使用新的“现代操作系统”
- FZU软工第四次作业-团队介绍
- google 的autodraw
- 有哪些免费在线压缩图片的方法或工具
- JVM——对象创建与内存分配机制
- 视频教程- 1-1 课程导学和Python简介-Python干货!
- 踏上Revit二次开发之路 2 从“HelloWorld”入手
- HashMap原理简述
- 服务器重装频率超出范围,频率超出范围,小编教你显示器频率超出范围怎么解决...
- 【深度学习基础】深度学习符号定义(符号表示,符号惯例,符号约定)