MATLAB 板


LINE

※ 引述《sunev (Veritas)》之铭言: : 标题: Re: [请益]for回圈内差法过慢 : 时间: Fri Jun 23 18:18:39 2017 : ※ 引述《s455164 (梦想家)》之铭言: : : 有点卡关.. : : 我有三个阵列: : : 三维阵列A(100,100,51)、二维阵列B(100,100)、一维阵列C(1,51) : : 其中A阵列的第三个维度是与C互相呼应的(A(:,:,1)是对应C(1,1)) : : 想要利用B阵列与C阵列之间的比例关系去对A阵列 : : 内插出一个新的二维阵列A'(100,100) : : 我自己的写法是这样的 : : A' = zeros(100,100); : : for i = 1:100 : : for j = 1:100 : : for k = 1:51-1 : : if ((B(i,j)>=C(k)) && (B(i,j)<=C(k+1))) || (((B(i,j)>=C(k)) && (B(i,j)>=C(k+1) : : A'(i,j) = (A(i,j,k+1)-A(i,j,k)) * (B(i,j)-C(k))/(C(k+1)-C(k)) + A(i,j,k); : : elseif (B(i,j) <= C(k)) && (B(i,j) < = C(k+1)) : : A'(i,j) = A(i,j,k+1) - (A(i,j,k+1)-A(i,j,k)) * (C(k+1)-B(i,j))/(C(k+1)-C(k)) : : end : : end : : end : : end : : 可是发现计算时间真的太长了,要花到3个多小时...不知道可以如何改善 : : 想请教如何解决,麻烦大家了 : -- :



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.37.138.130
: ※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1498213121.A.C13.html : 推 s455164: 阿不好意思 对其实以matlab的写法 应该要表示为AA 06/23 22:52 : 推 s455164: 好的 那我回去试看看 感谢你 06/23 23:13 : 推 s455164: AA不会随k变动 06/23 23:30 : → s455164: 但是AA上的元素,例如AA( 1 , 2 )是先判断 B阵列的B( 1 , 06/23 23:30 : → s455164: 2 ) 的值是介在C阵列中的哪个位置後[假如是C(4) < B(1, 06/23 23:30 : → s455164: 2 ) < C(5)],再提出相对应位置的A(1,2,4)&A(1,2,5)去内插 06/23 23:30 : → s455164: 出AA(1,2)这样 06/23 23:30 : → sunev: 所以在所有k里取最後条件成立的值? 06/24 07:40 : 推 s455164: 取最後k维度出来的值 再丢回相对应的AA( i , j )之中 06/24 09:13 : → s455164: 所以AA阵列上的每个元素需要用到的C(k)都是不一样的,我 06/24 09:21 : → s455164: 有想过是让A阵列以A(:,:,K)计算到一个新的阵列A1里,再只 06/24 09:21 : → s455164: 挑要的位置出来提到AA中[AA(i,j)=A1(i,j]但是这样好像更 06/24 09:21 : → s455164: 慢..就不行了 06/24 09:21 : → sunev: 你的C是排序过的吗? 06/24 11:49 : 推 s455164: 对喔 C是已经整理过的 06/24 12:14 : 推 s455164: http://i.imgur.com/tMCtsR4.jpg 06/24 12:37 原来如此 这样的话你if条件可再简化 先把回圈作法整理一次 AA=zeros(100,100); for i = 1:100 for j = 1:100 for k = 2:51 if B(i,j)<=C(k) AA(i,j) = A(i,j,k-1)... + (A(i,j,k)-A(i,j,k-1)) * (C(k)-B(i,j))/(C(k)-C(k-1)); break end end end end 这边是假设B的值一定落在C里面 如果B有可能跑到外面要再加例外控制 如果程式逻辑是这样的话 能省的回圈好像只有最里面的k回圈 for i = 1:100 for j = 1:100 k=find(B(i,j)<=C,1); AA(i,j)=A(i,j,k-1) + (A(i,j,k)-A(i,j,k-1)) * (C(k)-B(i,j))/(C(k)-C(k-1)); end end 这两层回圈可以想办法用arrayfun取代 但应该不会比较快就是 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.37.138.130
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1498280900.A.298.html
1F:→ sunev: 如果C是等间隔,k就可以用算的,应可再加速 06/24 13:20
2F:推 s455164: 好的 C是等间隔没错 06/24 15:57
3F:→ s455164: 那我试看看 06/24 15:57
4F:→ sunev: 等间隔的话,应该可以完全避掉回圈 06/25 19:30







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灯, 水草

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

TOP