登录论坛

查看完整版本 : [求助]for优化,结果不对


hu17889
2008-04-02, 21:18
开始问题已经解决,
将原来的int8(m/w)和int8(n/w)改成了floor(m/w),floor(n/w)
谢谢大家关心,下面又出了个问题:lol:

function g=BloSum(f,w)
%f矩阵,w块大小
%m,n矩阵的长宽
[m,n]=size(f)
g=zeros(floor(m/w),floor(n/w))

x1=1:floor(m/w)
y1=1:floor(n/w)
g(x1,y1)=mean(mean(f((x1-1)*w+1:x1*w,(y1-1)*w+1:y1*w)))

end

我用矩阵f=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4]实验得到的结果是
ans =

1.5000 1.5000
1.5000 1.5000
应该是
ans =

1.5000 3.5000
1.5000 3.5000
现不知道原因,求助各位大大,,,,

watcher
2008-04-03, 11:18
看这程序,x1和y1是向量吧,如果是向量,那么后边对矩阵f的引用就不对了。

hu17889
2008-04-03, 12:37
我想用向量循环优化的形式替代for循环,象下面一样
n=1:10;
x=sin(n*pi/10)
n是向量,x也是向量
我程序里想对矩阵f实现二维的优化

watcher
2008-04-03, 15:23
用向量:向量的形式不能产生期望的矩阵下标序列

hu17889
2008-04-03, 17:35
那应该怎么实现我说的功能呢,是不是只能用for写

watcher
2008-04-03, 17:45
是要求f矩阵中所有w阶主子式中对应元素的均值?

hu17889
2008-04-03, 18:02
只是单纯分成w*w大小的矩阵,比如
f =

1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
分成
1 2
1 2

1 2
1 2

3 4
3 4

3 4
3 4
再求均值存到向量g中
结果是
g =

1.5000 3.5000
1.5000 3.5000

fgabertb
2008-04-03, 19:54
你是要算方塊化的平均嗎
有內建函數

f=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4];

g=blkproc(f,[2 2],'mean2'):smile:


不用的寫法
A=[1 2 3 4;1 2 3 4;1 2 3 4 ;1 2 3 4] ;
g=reshape(mean([reshape(A(:,1:2:end),2,[]);reshape(A(:,2:2:end),2,[])]),size(A,1)/2,[])

hu17889
2008-04-04, 15:52
谢谢,,,,:lol:
学习了
我还想知道,为什么我那样写结果不对呢,麻烦了,,,,,

写成
for i1=1:floor(m/w)
for j1=1:floor(n/w)
mi(x1,y1)=mean(mean(f((x1-1)*w+1:x1*w,(y1-1)*w+1:y1*w)));
end
end
就对了

watcher
2008-04-04, 16:46
谢谢,,,,:lol:
学习了
我还想知道,为什么我那样写结果不对呢,麻烦了,,,,,

写成
for i1=1:floor(m/w)
for j1=1:floor(n/w)
mi(x1,y1)=mean(mean(f((x1-1)*w+1:x1*w,(y1-...

循环控制变量是x1和y1吧,在循环内x1和y1都是标量。