24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1256  |  回复: 5

myw052

金虫 (正式写手)

博士

[求助] matlab 高维数组插值 矢量化 避免for循环

本人在编程中遇到一个问题。涉及到高维数组插值,可能我这样说不太好理解,我给各位写一个小例子,说明我的难点在哪里。希望程序达人们能够给予帮助。

A(:,:,1)=[1,2;3,4];
A(:,:,2)=[4,5;6,7];
Ld=[1,8];

Ld_new=2:0.5:7.5;
求A_new

上述问题的意思是,当Ld(1)=1时A(:,:,1)=[1,2;3,4], Ld(2)=8时A(:,:,2)=[4,5;6,7];
现在如果令Ld_new数组等于介于1-8的数,插值得到A_new的数。例如当Ld_new=2的时候A_new(:,:,1)=A(:,:,1)+(A(:,:,2)-A(:,:,1))*(2-1)/(8-1);

依次类推插值得到A_new.

采用for循环的话,当Ld_new的长度变为10^n次方时执行起来速度很慢,因此大家如果有采用矢量化实现插值的方法,还请不吝赐教。
回复此楼
天天快乐
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
myw052: 金币+2, 您这个是一种方法,但是没有考虑插值。 2012-04-25 14:11:10
CODE:
A_new(:,:,1)=A(:,:,1)+(A(:,:,2)-A(:,:,1))*(2-1)/(8-1);

从式子上看,矩阵A_new比A的尺寸要小。

可以的话,把A_new先设置成A的尺寸,再新建一个矩阵B=A,然后,B(:,:,1:end-1) = A(:,:,2:end);
最后

A_new=A+(B-A)*(2-1)/(8-1);

A_new(:,:,end) = [];

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
2楼2012-04-24 20:55:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

怎么没有考虑差值呢?!那个B矩阵已经是错位安置了,要是不差值,干嘛错位。呵呵

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
3楼2012-04-25 16:38:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

祝楼主好运~

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
4楼2012-04-25 16:41:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

myw052

金虫 (正式写手)

博士

引用回帖:
3楼: Originally posted by lurencyj at 2012-04-25 16:38:15:
怎么没有考虑差值呢?!那个B矩阵已经是错位安置了,要是不差值,干嘛错位。呵呵

我说的是插值,您误解我了,不是差值。
我的意思是上面不是Ld为一个1*2的数组,Ld(1)对应于A(:,:,1),Ld(2)对应于A(:,:,2),
现在Ld_new为一个新的数组,且其值在Ld(1)和Ld(2)之间。如果我给定一个Ld_new(i),就能通过插值得到一个A_new(i).

你看这个您能帮看看么?
天天快乐
5楼2012-04-25 16:59:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

6楼2012-04-25 17:11:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 myw052 的主题更新
信息提示
请填处理意见