Markdown中显示矩阵运算过程

2023-10-31

发现这个神奇的用法,以后写博客就可以很好的演示矩阵乘法了
原文知乎
这里再分享一个可以把latex转成图片的在线网站quicklatex

markdown 显示矩阵



from IPython.display import display,Latex,Math
%matplotlib inline
import numpy as np
from IPython.core.interactiveshell import InteractiveShell
sh = InteractiveShell.instance()

def number_to_str(n,cut=5):
    ns=str(n)
    format_='{0:.'+str(cut)+'f}'
    if 'e' in ns or ('.' in ns and len(ns)>cut+1):
        return format_.format(n)
    else:
        return str(n)

def matrix_to_latex(mat,style='bmatrix'):
    if type(mat)==np.matrixlib.defmatrix.matrix:
        mat=mat.A
    head=r'\begin{'+style+'}'
    tail=r'\end{'+style+'}'
    if len(mat.shape)==1:
        body=r'\\'.join([str(el) for el in mat])
        return head+body+tail
    elif len(mat.shape)==2:
        lines=[]
        for row in mat:
            lines.append('&'.join([number_to_str(el)  for el in row])+r'\\')
        s=head+' '.join(lines)+tail
        return s
    return None

sh.display_formatter.formatters['text/latex'].type_printers[np.ndarray]=matrix_to_latex
def show_decomposition(*args):
    latex=''
    for arg in args:
        if type(arg)==str:
            latex+=arg
        else:
            latex+=matrix_to_latex(arg)
    latex='$'+latex+'$'
    display(Math(latex))

效果如下

A = arange(25).reshape(5, 5)
omega = random.randn(5, 2)
show_decomposition(A,"*",omega,"=", np.dot(A,omega))

05101520161116212712172238131823491419241.373280.275551.667080.655180.329181.419540.093141.816800.771331.37744=3.707435.428667.149908.8711310.592374.0970112.3888620.6807228.9725837.26443 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ] ∗ [ 1.37328 1.41954 0.27555 − 0.09314 − 1.66708 − 1.81680 − 0.65518 0.77133 0.32918 1.37744 ] = [ − 3.70743 4.09701 − 5.42866 12.38886 − 7.14990 20.68072 − 8.87113 28.97258 − 10.59237 37.26443 ]

基于以上代码,我修改了部分,让其能够显示一层嵌套的矩阵,或者显示矩阵代表的符号,这样方便写博客演示

def matrix_object_to_latex(col, *args):
    latex='$ \\begin{matrix} '
    i = 0
    for arg in args:
        i = i + 1
        latex += " & "
        if type(arg)==str:
            latex+=arg
        else:
            latex+=matrix_to_latex(arg)
        if i % col == 0:
            latex += " \\\\ "
    latex += "\end{matrix} $"
    print(latex)
    display(Math(latex))
    return latex

测试代码

d = 4
matrix_a = np.arange(d*d).reshape(d,d)
matrix_b = np.arange(d*d).reshape(d,d)

tex = matrix_object_to_latex(5, "A","*","B","=","C",matrix_a,"*",
    matrix_b,"=",np.dot(matrix_a,matrix_b))

效果如下
A0481215913261014371115B0481215913261014371115==C56152248344621742863986819632445274218362506 A ∗ B = C [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ] ∗ [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ] = [ 56 62 68 74 152 174 196 218 248 286 324 362 344 398 452 506 ]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Markdown中显示矩阵运算过程 的相关文章

随机推荐

  • 学生考试信息管理系统c语言程序,学生信息管理系统(c语言)

    include include include include define LEN sizeof STD typedef struct student charxh 12 学号 charxm 12 姓名 floatsxcj 数学成绩 fl
  • 记录下FMDB的简单使用

    软件开发中常用到数据库 而移动开发中sqlite3是最常用的 IOS早就支持了sqlite数据库 由于直接使用sqlite操作数据库不太方便 于是有了很多基于系统sqlite封装的第三方库 FMDB就是其中非常出色的一个 他使用起来灰常简单
  • The MRC database dictionary之IMAG库 (imagery 象性)

    beach 667 jeep 659 telephone 655 sunshine 655 skunk 652 cranberry 649 steak 647 father 646 cigarette 645 banana 644 sunl
  • MySQL innoDB底层基础原理总结

    MySQL innoDB底层基础原理 前言 由于正在准备之后的实习面试 故总结了一部分MYSQL innoDB基础的问题 回答全为自己组织的语言 若有错各位大佬可及时指出 大家共同进步 谢谢 1 innoDB索引实现原理 innoDB存储引
  • 第二十一章、文件服务器之三: FTP 服务器

    FTP File Transfer Protocol 可说是最古老的协议之一了 主要是用来进行档案的传输 尤其是大型档案的传输使用 FTP 更是方便 不过 值得注意的是 使用 FTP 来传输时 其实是具有一定程度的 危险性 因为数据在因特网
  • 你可以简单的设计一下上面的订单管理系统吗

    当然可以 首先 订单管理系统通常包含以下几个主要功能 订单录入 用户可以在系统中输入新的订单信息 包括订单编号 订购商品的种类 数量 单价 总价等信息 订单查询 用户可以根据订单编号 商品名称 日期等信息查询订单 订单修改 用户可以修改已经
  • 编程网站:21 个学习网站推荐给你,大部分编程语言都在这里了

    本文精选了21个有关代码 编程 Java Python SQL Git 和Ruby on Rails学习的网站 这些网站为以下内容的学习提供了免费的优质资源 编程语言 Python和Java等 常用技术 SQL等 操作系统 Linux等 W
  • 编译器中和64位编程有关的预定义宏

    版权声明 本文为博主原创文章 未经博主允许不得转载 本文对分别测试VC MinGW GCC 三种编译器 32位和64位模式 共6种情况下 和64位编程有关的与预定义宏的值 对跨平台编程具有参考意义 Agner Fog 在他的 Calling
  • MyBatis学习(三)-- 实现关联查询

    文章目录 1 实现关联查询 1 1 创建教师表 1 2 创建班级表 1 3 创建学生表 2 创建与数据库表对应的实体类 2 1 创建教师实体类 2 2 创建学生实体类 2 3 创建班级实体类 3 创建班级映射器配置文件 4 修改配置文件 5
  • 【Linux初阶】Linux环境下的 git 使用

    hello 各位读者大大们你们好呀 系列专栏 Linux初阶 本篇内容 详细阐述git是什么 git的发展脉络 还有Linux环境下git工具的具体使用方法 作者简介 计算机海洋的新进船长一枚 请多多指教 目录 一 git是什么 二 git
  • 模块1--BH1750的应用(IIC)

    1 BH1750基本原理讲解 BH1750作为一款数字化的光照传感器 采用的是IIC接口 本篇文章主要是侧重BH1750的应用 关于IIC总线的时序原理 请大家自行学习 数字化的传感器 简单点理解即只要通信接口配置正确 即可读出数据 内部集
  • 微服务架构中不同微服务之间的接口调用

    假定系统管理微服务的实例名称为system 在系统管理中查询码表 api system codeTable queryDataDictionaryByDicCode 在自己的微服务中调用系统管理的查询码表接口写法如下 DataDiction
  • 初识OpenGL (-)VAO&VBO

    如何填充VBO 配置顶点属性指针以及如何把它们都储存到一个VAO里 step1 把颜色数据加进顶点数据中 eg 把颜色数据添加为3个float值至vertices数组 把三角形的三个角分别指定为红色 绿色和蓝色 float vertices
  • 批处理框架

    什么是批处理 在现代企业应用当中 面对复杂的业务以及海量的数据 除了通过庞杂的人机交互界面进行各种处理外 还有一类工作 不需要人工干预 只需要定期读入大批量数据 然后完成相应业务处理并进行归档 这类工作即为 批处理 为什么使用Spring
  • 数据分析和数据挖掘概述

    1 含义 数据挖掘 指从大量的数据中 通过统计学 人工智能 机器学习等方法 挖掘出未知的 且有价值的信息和知识的过程 数据分析 可分为广义的数据分析和狭义的数据分析 广义的数据分析就是包括狭义的数据分析和数据挖掘 而我们常说的数据分析指的是
  • 交叉编译工具的使用说明

    写在前面的话 由于已经学习了JZ2440V3开发板的裸机程序 想检验下学习成果 所以从今天开始把以前学的知识点在tiny4412开发板上面做个检验 裸机部分学习到把uboot移植完成就结束 然后 学习内核的驱动和其他子系统框架 言归正传 现
  • 阿里面试官:接口的幂等性怎么设计?

    一 什么是幂等 看一下维基百科怎么说的 幂等性 多次调用方法或者接口不会改变业务状态 可以保证重复调用的结果和单次调用的结果一致 二 使用幂等的场景 1 前端重复提交 用户注册 用户创建商品等操作 前端都会提交一些数据给后台服务 后台需要根
  • linux shell 正则表达式(BREs,EREs,PREs)差异比较

    http www cnblogs com chengmo archive 2010 10 10 1847287 html 正则表达式 在计算机科学中 是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串 在很多文本编辑器或其他
  • 笛卡尔树建树

    拿个单调队列维护 最后pop出来的就是它的左儿子 现在还在的 它是他的右儿子 int build int S N for int i 1 i lt n i while top T S top val lt T i val T i son 0
  • Markdown中显示矩阵运算过程

    发现这个神奇的用法 以后写博客就可以很好的演示矩阵乘法了 原文知乎 这里再分享一个可以把latex转成图片的在线网站quicklatex markdown 显示矩阵 from IPython display import display L