MATLAB 板


LINE

最近遇到一个问题目前只想到用多层for来处理,想请问有没有办法简化 问题大概是这样,有两个m*n*k的三维矩阵atot和atotcc,atotcc是atot的共轭复数 https://imgur.com/9Eou21X 其中每一个k方向的红框atot(1,1,:) atotcc(2,3,:)这些视为一个个向量,目标是把所 有atot中的m*n个向量和atotcc中的m*n个向量分别做内积得到(m*n)^2个值,再取总合 目前的程式大概是这样 m=15; n=19; k=10000; ar=randn(n,m,k); ai=randn(n,m,k); atot=ar+i*ai; atotcc=conj(atot); acsd=zeros(n,m,n,m)+i*zeros(n,m,n,m); tic; for ix=1:m for iy=1:n for ixc=1:m for iyc=1:n acsd(iy,ix,ixc,iyc)=sum(bsxfun(@times,atot(iy,ix,:),atotcc(iyc,ixc,:))); end end end end toc tic; acsdsum=sum(sum(sum(sum(acsd)))); toc 说是内积但是不用dot是因为有复数用起来有些问题,一维的话我知道可以取转置,但是 写成(iy,ix,:)这种形式不太知道怎麽做所以先用sum配上bsxfun或.* 感觉写这麽多层回圈不是很有效率,而且也不适合用gpu加速(目前只会变慢),但这应该是 很适合平行化的计算(上面的程式在执行时会自动在cpu上平行化),因为所有的内积以及 内积中的运算分别都是独立的 在这先谢谢板上先进的不吝指教 感恩 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.114.253.34
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1513620596.A.E0A.html 也可以先变成(m*n)*k的二维矩阵 https://imgur.com/OD6Cu3O m=15; n=19; k=10000; mtn=m*n; ar=randn(mtn,k); ai=randn(mtn,k); atot=ar+i*ai; atotcc=conj(atot); tic; for ixc=1:mtn for iyc=1:mtn acsd(iyc,ixc)=sum(atot(ixc,:).*atotcc(iyc,:)); end end toc tic; acsdsum=sum(sum(acsd)); toc (可能是要转置的关系,写成dot acsd(iyc,ixc)=dot(atot(ixc,:)',atotcc(iyc,:)); 会更慢) 这样就少了两层for,用cpu速度看起来是差不多,gpu的话写成这样比四层快非常多,不 过还是比cpu慢,不知道有没有办法再简化 m=15; n=19; k=10000; mtn=m*n; ar=randn(mtn,k,'gpuArray'); ai=randn(mtn,k,'gpuArray'); atot=ar+i*ai; atotcc=conj(atot); acsd=zeros(mtn,mtn,'gpuArray')+i*zeros(mtn,mtn,'gpuArray'); tic; for ixc=1:mtn for iyc=1:mtn acsd(iyc,ixc)=sum(atot(ixc,:).*atotcc(iyc,:)); end end toc tic; acsdsum=sum(sum(acsd)); toc 感恩 ※ 编辑: Absolitude (140.114.253.34), 12/19/2017 02:47:19 ※ 编辑: Absolitude (140.114.253.34), 12/19/2017 02:53:38
1F:推 sunev: atot=randn(m*n,k)+1i*randn(m*n,k); 12/19 05:27
2F:→ sunev: acsdsum=sum(sum(atot*atot')); 12/19 05:27
谢谢 我震惊到说不话.. ※ 编辑: Absolitude (140.114.253.159), 12/19/2017 12:24:55 虽然一开始没说,但是给了一点P比以示谢意,帮助太多 我觉得我矩阵都白学了.. ※ 编辑: Absolitude (140.114.253.159), 12/19/2017 12:27:33
3F:→ Absolitude: 之前用的时候都没用到复数,没想到转置後还会变共轭 12/19 15:40
4F:推 sunev: 你画的图很精美,证明你完全知道自己想算什麽,也用到了一 12/19 20:50
5F:→ sunev: 些vectorize的技巧,像是2维变1维以及bsxfun 12/19 20:50
6F:→ sunev: 你只是不知道两件事, 12/19 20:53
7F:→ sunev: 1.矩阵相乘可以看成向量内积的推广。 12/19 20:53
8F:→ sunev: 2.复数向量怎麽做内积。 12/19 20:54
9F:→ sunev: 有兴趣可以去翻一下线性代数的书,里面有提到这些事 12/19 20:54
谢谢你的建议 ※ 编辑: Absolitude (140.114.253.151), 12/20/2017 03:19:45 比起一开始把MATLAB当C那样写,现在大致了解MATLAB要用什麽行事才会快,不过常常 想不到从何下手,大概也只能多练习了 ※ 编辑: Absolitude (140.114.253.151), 12/20/2017 03:21:18







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP