码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • t-product的matlab实现


    t-product是一个比较好的概念,相对应于矩阵中的乘法。

    定义如下

    这里的 circ(A),MatVec(b) 的定义分别如下

    这么定义的原因是为了映射到FFT域里面去,简化计算。

    上面的一段摘录说明:直接按照定义来计算,会耗费大量的计算资源。因此,实际使用中是应用的另外一种方法“FFT”.

    这两个等式是相等的,因为下面的公式其实施加了FFT变换之后又做了逆变换。注意发现上面的等式很有意思,结合文字好好看一下就有下面的计算方式。

    计算方式

    简单的说, A∗B 的过程如下

    1. 先把 A,B 模三展开,对每一个切片分别施加FFT, A¯(i),B¯(i)
    2. 切片对应相乘, A¯(i)∗B¯(i)
    3. 折叠回张量。

    具体的原理,只知道可以这么做。具体理论分析,等待后续的知识(也在这篇论文上)。

    Matlab代码实现

    1. function C = tprod(A, B)
    2. % tensor-tensor product of two 3-order tensors : C = A * B
    3. % compute in the Fourier domain, efficiently
    4. % A - n1 x n2 x n3 tensor
    5. % B - n2 x l x n3 tensor
    6. % C - n1 x l x n3 tensor
    7. [n1, ~, n3] = size(A);
    8. l = size(B, 2);
    9. Af = fft(A, [], 3);
    10. Bf = fft(B, [], 3);
    11. Cf = zeros(n1, l, n3);
    12. for i = 1 : n3
    13. Cf(:, :, i) = Af(:, :, i) * Bf(:, :, i);
    14. end
    15. C = ifft(Cf, [], 3);
    16. end
    fft(A,[],3)是标准的三阶张量沿模三做FFT的matlab操作.不必理会。

    一个模拟数据验证

    1. clc
    2. clear all
    3. %如何计算两个张量的t-product
    4. X1 = 1:12;
    5. X1 = reshape(X1,[3,4]);
    6. X2 = 13:24;
    7. X2 = reshape(X2,[3,4]);
    8. X(:,:,1) = X1;
    9. X(:,:,2) = X2;
    10. Y1 = ones(4,3);
    11. Y2 = ones(4,3);
    12. Y(:,:,1) = Y1;
    13. Y(:,:,2) = Y2;
    14. C = tprod(X,Y)
    15. C1 = X1*Y1 + X2*Y2
    16. C2 = X2*Y1 + X1*Y2

    结果如下

    1. C
    2. C(:,:,1) =
    3. 92 92 92
    4. 100 100 100
    5. 108 108 108
    6. C(:,:,2) =
    7. 92 92 92
    8. 100 100 100
    9. 108 108 108
    10. C1 =
    11. 92 92 92
    12. 100 100 100
    13. 108 108 108
    14. C2 =
    15. 92 92 92
    16. 100 100 100
    17. 108 108 108

    总结

    简单的记录一下,免的遗忘。

    参考文献:Factorization strategies for third-order tensors
  • 相关阅读:
    华为云云耀云服务器L实例评测 | 实例场景体验之搭建个人博客:通过华为云云耀云服务器构建个人博客
    跨域?如何解决?同源策略?
    【Nacos篇】Nacos基本操作及配置
    动态内存分配【C语言】
    AntiSamy防跨站脚本攻击(XSS)快速入门
    visual studio 2019中文乱码
    java基于springboot+vue驾校预约网站管理系统
    【计算机毕设小程序案例】基于SpringBoot的小演员招募小程序
    SBOM:缓解软件供应链风险的关键
    2. 多机多卡运行nccl-tests对比分析
  • 原文地址:https://blog.csdn.net/m0_69824302/article/details/134451020
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号