MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [求助]for优化,结果不对 (https://www.labfans.com/bbs/showthread.php?t=2030)

hu17889 2008-04-02 21:18

[求助]for优化,结果不对
 
开始问题已经解决,
将原来的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

[QUOTE=hu17889;7870]谢谢,,,,: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-...[/QUOTE]

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


所有时间均为北京时间。现在的时间是 05:21

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.