官方文档写了个寂寞,既非中文也只有示例没有解释,这谁看得懂?总体而言,这个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】相关推荐

  1. 【深度学习】爱因斯坦求和约定(einsum)

    import tensorflow as tf print(tf.__version__) 2.0.0 一.爱因斯坦求和约定(einsum)的介绍 爱因斯坦求和约定是一种对复杂张量运算的优雅表达方式. ...

  2. np.einsum(爱因斯坦求和约定)

    欢迎关注我的微信公号:小张Python einsum 全称 Einstein summation convention(爱因斯坦求和约定),用简单的方式来代表多维数组运算: 矩阵求各元素之和 A=∑i ...

  3. tf.einsum—爱因斯坦求和约定

    1. einsum记法 如果你像我一样,发现记住PyTorch/TensorFlow中那些计算点积.外积.转置.矩阵-向量乘法.矩阵-矩阵乘法的函数名字和签名很费劲,那么einsum记法就是我们的救星 ...

  4. 一文掌握爱因斯坦求和约定 einsum

    爱因斯坦跟 NumPy 有关系吗?没有,但他提出了一个针对数学公式的符号简化办法,即爱因斯坦求和约定(Einstein Summation Convention)或者叫爱因斯坦标记法(Einstein ...

  5. 爱因斯坦求和约定 含代码einsum

    目录 一.简介 1.哑标 2.自由标 二.torch实现 1.计算迹 2.取矩阵对角线 3.计算外积 4.batch矩阵乘法 5.带有子列表和省略号 6.变换维度 7.双线性变换,类似于torch.n ...

  6. 爱因斯坦求和约定在Python扩展库Numpy中的实现

    推荐教材: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,2020年1月出版,2021年12月第 ...

  7. python 笔记:爱因斯坦求和 einsum

    1 einsum简介 使用爱因斯坦求和约定,可以以简单的方式表示许多常见的多维线性代数数组运算. 给定两个矩阵A和B,我们想对它们做一些操作,比如 multiply.sum或者transpose等.虽 ...

  8. einsum爱因斯坦求和(numpy)

    0. 爱因斯坦求和约定(Einstein Notation) 在数学中,爱因斯坦求和约定是一种标记法,也称为Einstein Summation Convention,在处理关于坐标的方程式时十分有效 ...

  9. React16常用api解析以及原理剖析

    React16常用api解析以及原理剖析 目录 Vue 与 React 两个框架的粗略区别对比 react 16 版本常见 api react 生命周期 react 事件机制 react.Compon ...

最新文章

  1. IIS配置跨服务器迁移
  2. python爬虫能干什么-总算发现python爬虫能够干什么
  3. xmpp整理笔记:xmppFramework框架的导入和介绍
  4. php jpg转换为pdf文件,php使用ImageMagick将PDF文件转换为JPG文件的方法_PHP
  5. 如何在jieba分词中加自定义词典_Pyspark Word2Vec + jieba 训练词向量流程
  6. mysql2005卸载步骤,二次安装mysql步骤
  7. 每天走6000步,血糖真的可以恢复正常吗?
  8. java商城项目_javaweb实战之商城项目开发(一)
  9. 争锋职考职称计算机,PVP攻略 | 新秀职业的争锋天下?
  10. 端口映射不能访问80端口
  11. java做一个客房管理系统定制_java实现客房管理系统
  12. 电脑网络适配器黄色感叹号,无法连接WiFi?显示适配器黄色小标?
  13. uva 571 Jugs
  14. Windows 日志安全审核
  15. JavaWeb实现生成二维码
  16. 如何实现一篇数据新闻报道
  17. 【新手提问导读】提问的艺术_提问的艺术
  18. ➢ 微信公众号运营教程(一)申请一个微信公众号
  19. 《精妙的IT》免费公开课
  20. 特斯拉Model Y 标准续航实测

热门文章

  1. 新闻系统开发摘要_每日新闻摘要:Microsoft提示使用新的“现代操作系统”
  2. FZU软工第四次作业-团队介绍
  3. google 的autodraw
  4. 有哪些免费在线压缩图片的方法或工具
  5. JVM——对象创建与内存分配机制
  6. 视频教程- 1-1 课程导学和Python简介-Python干货!
  7. 踏上Revit二次开发之路 2 从“HelloWorld”入手
  8. HashMap原理简述
  9. 服务器重装频率超出范围,频率超出范围,小编教你显示器频率超出范围怎么解决...
  10. 【深度学习基础】深度学习符号定义(符号表示,符号惯例,符号约定)