楼主: ywh19860616
16619 101

[问答] R程序改写为matlab程序 [推广有奖]

21
epoh 发表于 2012-5-9 19:45:41 |只看作者 |坛友微信交流群
ywh19860616 发表于 2012-5-9 18:34
呵呵,epoh老师,非常抱歉,可能我没有说清楚问题。
您上面的程序得出的还只是一个ZZ值,而我想要的其 ...
load ct_data   
result = distance_wm(yc,xc);   
Xij=result.dista ;            
Wij=result.dw ;     
dista = GeogDistance(yc,xc);            
k=[0.6,0.7,0.4,0.5,0.8,0.9,1];
s=length(k);
ZZmat=zeros(1,length(k));
[n,m]=size(dista);
WW=zeros(n,m,s);
for s =1:length(k)
WWij=zeros(n,m);
for i = 1:n
    for j = 1:m
      WWij(i,j)=exp(-k(s)*dista(i,j));  
    end
      WW(:,:,s)=WWij;
end %end j
[GGI,ZZG,ZZ]=Getis1(WWij,Xij);
ZZmat(s)=ZZ;
end %end s
ZZmat
index=find(ZZmat==max(ZZmat))
WW
WW(:,:,index)
%%%%%%%%%%%%%%%%%%%%%%
ZZmat =

    0.0447    0.0175    0.3017    0.1153    0.0070    0.0028    0.0011


index =

     3


WW(:,:,1) =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000


WW(:,:,2) =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000


WW(:,:,3) =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0003    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0003    1.0000    0.0007    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0007    1.0000    0.0001    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0001    1.0000    0.0000    0.0001    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0001    0.0000    1.0000    0.0002
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0002    1.0000


WW(:,:,4) =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    1.0000    0.0001    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0001    1.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000


WW(:,:,5) =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000


WW(:,:,6) =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000


WW(:,:,7) =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000


ans =

    1.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    0.0003    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0003    1.0000    0.0007    0.0000    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0007    1.0000    0.0001    0.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0001    1.0000    0.0000    0.0001    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0000    1.0000    0.0000    0.0000
    0.0000    0.0000    0.0000    0.0000    0.0001    0.0000    1.0000    0.0002
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0002    1.0000
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 5 + 5 + 5 非常感谢epoh老师

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

22
ywh19860616 发表于 2012-5-9 20:11:18 |只看作者 |坛友微信交流群
epoh 发表于 2012-5-9 19:45
load ct_data   
result = distance_wm(yc,xc);   
Xij=result.dista ;
谢谢epoh老师,呵呵,循环有点复杂
我原来把s那个循环和i,j循环放在一起,总是出来一个结果。
现在程序运行很好。
一份耕耘,一份收获。

使用道具

23
ywh19860616 发表于 2012-5-10 18:55:09 |只看作者 |坛友微信交流群
epoh 发表于 2012-5-9 19:45
load ct_data   
result = distance_wm(yc,xc);   
Xij=result.dista ;
epoh老师,您好。今天利用这个程序试算了一下,感觉有点问题,但是我找不出哪里。
您这里取 k=[0.6,0.7,0.4,0.5,0.8,0.9,1]; 所以运行出来index=3,即最后选择了第三个k值,k=0.4
也是这组k值中最小的。

我试了好多k值,比如k=0.01:0.1:1,得出的结果永远是k值最小的那个,按照理论应该不可能这样的,不知道问题出在哪?

起初我想 Xij应该是一个变量,数据应该是一个行向量或者列向量,所以我试了自己找的数据,但是也是一样的结果。
就是实现这篇文章第5部分提到的:Spatial Filtering with EViews and MATLAB http://www.stat.tugraz.at/AJS/ausg071/071Ferstl.pdf

一份耕耘,一份收获。

使用道具

24
epoh 发表于 2012-5-10 19:54:09 |只看作者 |坛友微信交流群
ywh19860616 发表于 2012-5-10 18:55
epoh老师,您好。今天利用这个程序试算了一下,感觉有点问题,但是我找不出哪里。
您这里取 k=[0.6,0. ...
load ct_data   
result = distance_wm(yc,xc);   
Xij=result.dista ;            
Wij=result.dw ;     
dista = GeogDistance(yc,xc);            
k=0.01:0.01:0.09
s=length(k);
ZZmat=zeros(1,length(k));
[n,m]=size(dista);
WW=zeros(n,m,s);
for s =1:length(k)
WWij=zeros(n,m);
for i = 1:n
    for j = 1:m
     if (i~=j)
        WWij(i,j)=exp(-k(s)*dista(i,j));  
     elseif (i==j)
        WWij(i,j)=0;
     end %end if
    end  %end i
      WW(:,:,s)=WWij;
end %end j
[GGI,ZZG,ZZ]=Getis1(WWij,Xij);
ZZmat(s)=ZZ;
end %end s
ZZmat
index=find(ZZmat==max(ZZmat))
WW
WW(:,:,index)

%%%%%%%%%%%%%%%%%%%%%
k =

    0.0100    0.0200    0.0300    0.0400    0.0500    0.0600    0.0700    0.0800    0.0900

ZZmat =

   10.5321   13.1748   14.1048   14.1081   13.5731   12.7366   11.7508   10.7131    9.6844


index =

     4


WW(:,:,1) =

         0    0.7680    0.6252    0.5231    0.5344    0.6927    0.6495    0.7339
    0.7680         0    0.8133    0.6812    0.6749    0.6057    0.7725    0.7467
    0.6252    0.8133         0    0.8350    0.7547    0.5083    0.7487    0.6476
    0.5231    0.6812    0.8350         0    0.7835    0.4402    0.6843    0.5671
    0.5344    0.6749    0.7547    0.7835         0    0.5050    0.7989    0.6486
    0.6927    0.6057    0.5083    0.4402    0.5050         0    0.6300    0.7745
    0.6495    0.7725    0.7487    0.6843    0.7989    0.6300         0    0.8115
    0.7339    0.7467    0.6476    0.5671    0.6486    0.7745    0.8115         0


WW(:,:,2) =

         0    0.5898    0.3909    0.2737    0.2856    0.4799    0.4219    0.5386
    0.5898         0    0.6614    0.4640    0.4555    0.3669    0.5968    0.5575
    0.3909    0.6614         0    0.6972    0.5696    0.2583    0.5606    0.4194
    0.2737    0.4640    0.6972         0    0.6138    0.1938    0.4682    0.3216
    0.2856    0.4555    0.5696    0.6138         0    0.2550    0.6382    0.4207
    0.4799    0.3669    0.2583    0.1938    0.2550         0    0.3969    0.5999
    0.4219    0.5968    0.5606    0.4682    0.6382    0.3969         0    0.6585
    0.5386    0.5575    0.4194    0.3216    0.4207    0.5999    0.6585         0


WW(:,:,3) =

         0    0.4530    0.2444    0.1432    0.1527    0.3324    0.2740    0.3953
    0.4530         0    0.5379    0.3161    0.3075    0.2222    0.4610    0.4163
    0.2444    0.5379         0    0.5821    0.4299    0.1313    0.4198    0.2716
    0.1432    0.3161    0.5821         0    0.4809    0.0853    0.3204    0.1824
    0.1527    0.3075    0.4299    0.4809         0    0.1288    0.5099    0.2729
    0.3324    0.2222    0.1313    0.0853    0.1288         0    0.2501    0.4646
    0.2740    0.4610    0.4198    0.3204    0.5099    0.2501         0    0.5343
    0.3953    0.4163    0.2716    0.1824    0.2729    0.4646    0.5343         0


WW(:,:,4) =

         0    0.3479    0.1528    0.0749    0.0816    0.2303    0.1780    0.2901
    0.3479         0    0.4375    0.2153    0.2075    0.1346    0.3561    0.3108
    0.1528    0.4375         0    0.4860    0.3244    0.0667    0.3143    0.1759
    0.0749    0.2153    0.4860         0    0.3768    0.0376    0.2192    0.1034
    0.0816    0.2075    0.3244    0.3768         0    0.0650    0.4073    0.1770
    0.2303    0.1346    0.0667    0.0376    0.0650         0    0.1575    0.3599
    0.1780    0.3561    0.3143    0.2192    0.4073    0.1575         0    0.4336
    0.2901    0.3108    0.1759    0.1034    0.1770    0.3599    0.4336         0


WW(:,:,5) =

         0    0.2672    0.0955    0.0392    0.0436    0.1595    0.1156    0.2129
    0.2672         0    0.3558    0.1467    0.1401    0.0815    0.2751    0.2321
    0.0955    0.3558         0    0.4058    0.2449    0.0339    0.2353    0.1139
    0.0392    0.1467    0.4058         0    0.2952    0.0165    0.1500    0.0587
    0.0436    0.1401    0.2449    0.2952         0    0.0328    0.3254    0.1148
    0.1595    0.0815    0.0339    0.0165    0.0328         0    0.0993    0.2787
    0.1156    0.2751    0.2353    0.1500    0.3254    0.0993         0    0.3519
    0.2129    0.2321    0.1139    0.0587    0.1148    0.2787    0.3519         0


WW(:,:,6) =

         0    0.2052    0.0597    0.0205    0.0233    0.1105    0.0751    0.1563
    0.2052         0    0.2893    0.0999    0.0945    0.0494    0.2125    0.1733
    0.0597    0.2893         0    0.3388    0.1848    0.0172    0.1762    0.0738
    0.0205    0.0999    0.3388         0    0.2313    0.0073    0.1026    0.0333
    0.0233    0.0945    0.1848    0.2313         0    0.0166    0.2600    0.0744
    0.1105    0.0494    0.0172    0.0073    0.0166         0    0.0625    0.2159
    0.0751    0.2125    0.1762    0.1026    0.2600    0.0625         0    0.2855
    0.1563    0.1733    0.0738    0.0333    0.0744    0.2159    0.2855         0


WW(:,:,7) =

         0    0.1576    0.0373    0.0107    0.0125    0.0765    0.0488    0.1147
    0.1576         0    0.2353    0.0681    0.0638    0.0299    0.1642    0.1294
    0.0373    0.2353         0    0.2829    0.1395    0.0088    0.1319    0.0478
    0.0107    0.0681    0.2829         0    0.1812    0.0032    0.0702    0.0189
    0.0125    0.0638    0.1395    0.1812         0    0.0084    0.2077    0.0483
    0.0765    0.0299    0.0088    0.0032    0.0084         0    0.0394    0.1672
    0.0488    0.1642    0.1319    0.0702    0.2077    0.0394         0    0.2317
    0.1147    0.1294    0.0478    0.0189    0.0483    0.1672    0.2317         0


WW(:,:,8) =

         0    0.1210    0.0233    0.0056    0.0067    0.0530    0.0317    0.0842
    0.1210         0    0.1914    0.0464    0.0431    0.0181    0.1268    0.0966
    0.0233    0.1914         0    0.2362    0.1053    0.0045    0.0988    0.0309
    0.0056    0.0464    0.2362         0    0.1419    0.0014    0.0481    0.0107
    0.0067    0.0431    0.1053    0.1419         0    0.0042    0.1659    0.0313
    0.0530    0.0181    0.0045    0.0014    0.0042         0    0.0248    0.1295
    0.0317    0.1268    0.0988    0.0481    0.1659    0.0248         0    0.1880
    0.0842    0.0966    0.0309    0.0107    0.0313    0.1295    0.1880         0


WW(:,:,9) =

         0    0.0929    0.0146    0.0029    0.0036    0.0367    0.0206    0.0618
    0.0929         0    0.1556    0.0316    0.0291    0.0110    0.0980    0.0721
    0.0146    0.1556         0    0.1972    0.0794    0.0023    0.0740    0.0200
    0.0029    0.0316    0.1972         0    0.1112    0.0006    0.0329    0.0061
    0.0036    0.0291    0.0794    0.1112         0    0.0021    0.1325    0.0203
    0.0367    0.0110    0.0023    0.0006    0.0021         0    0.0156    0.1003
    0.0206    0.0980    0.0740    0.0329    0.1325    0.0156         0    0.1526
    0.0618    0.0721    0.0200    0.0061    0.0203    0.1003    0.1526         0


ans =

         0    0.3479    0.1528    0.0749    0.0816    0.2303    0.1780    0.2901
    0.3479         0    0.4375    0.2153    0.2075    0.1346    0.3561    0.3108
    0.1528    0.4375         0    0.4860    0.3244    0.0667    0.3143    0.1759
    0.0749    0.2153    0.4860         0    0.3768    0.0376    0.2192    0.1034
    0.0816    0.2075    0.3244    0.3768         0    0.0650    0.4073    0.1770
    0.2303    0.1346    0.0667    0.0376    0.0650         0    0.1575    0.3599
    0.1780    0.3561    0.3143    0.2192    0.4073    0.1575         0    0.4336
    0.2901    0.3108    0.1759    0.1034    0.1770    0.3599    0.4336         0
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 5 + 5 + 5 epoh老师,谢谢

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

25
ywh19860616 发表于 2012-5-10 20:27:50 |只看作者 |坛友微信交流群
epoh 发表于 2012-5-10 19:54
load ct_data   
result = distance_wm(yc,xc);   
Xij=result.dista ;
epoh老师,谢谢
还有一个问题再请教您,上面程序的Xij其实为8*8的矩阵。
这两组命令得出的结果是一样的:
.....
Xij=result.dista;
.....

.....
Xij1=result.dista ;
Xij=Xij1(1,:);
......
也就是说其实现在的命令也只取了Xij中的第一行数据运行。如果我想对每一行数据都执行同样操作,应该在哪里加入循环?
比如循环操作:
for kk=1:8    % 8即为Xij的行数。
   [GGI,ZZG,ZZ]=Getis_revised(WWij,Xij(kk,:));
end
一份耕耘,一份收获。

使用道具

26
ywh19860616 发表于 2012-5-10 20:44:32 |只看作者 |坛友微信交流群
epoh老师,您看我下面执行结果正常吗?
我的想法是先对求出的Wij执行标准化,命令更改为:
......
for i = 1:n
    for j = 1:m
     if (i~=j)
        WWij(i,j)=exp(-k(s)*dista(i,j));  
     elseif (i==j)
        WWij(i,j)=0;
     end %end if
    end  %end i
      WW(:,:,s)=WWij;
end %end j
WW1ij=normw(WWij);  %normw是jvpl7工具箱的一个函数
[GGI,ZZG,ZZ]=Getis1(WW1ij,Xij);
ZZmat(s)=ZZ;
end %end s
......
k =
    0.0100    0.0200    0.0300    0.0400    0.0500    0.0600    0.0700    0.0800    0.0900

ZZmat =
    4.2811    8.1618   11.5776   14.5126   16.9869   19.0427   20.7317   22.1072   23.2194

index =
     9
我尝试了几组数据,结果显示ZZmat总是从小到大排列,感觉不对。


一份耕耘,一份收获。

使用道具

27
epoh 发表于 2012-5-10 21:57:19 |只看作者 |坛友微信交流群
ywh19860616 发表于 2012-5-10 20:44
epoh老师,您看我下面执行结果正常吗?
我的想法是先对求出的Wij执行标准化,命令更改为:
......
distance_wm.m已经标准化
对求出的Wij执行标准化
恐怕重复

ZZmat =

   10.5321   13.1748   14.1048   14.1081   13.5731   12.7366   11.7508   10.7131    9.6844
    7.0585    8.2455    8.2969    7.8566    7.2101    6.5026    5.8074    5.2754    4.7729
   14.8975   18.3559   19.4375   19.3021   18.4963   17.3349   16.0100   14.6396   13.2945
   16.2223   19.8581   20.8892   20.6055   19.6146   18.2636   16.7615   15.2342   13.7550
   13.6478   16.6916   17.5135   17.2049   16.2868   15.0609   13.7105   12.3468   11.0344
   13.8836   16.9895   17.8799   17.6583   16.8396   15.7157   14.4612   13.1810   11.9363
    7.5528    8.9430    9.1190    8.7473    8.1289    7.4203    6.7042    6.0220    5.3923
   10.1812   13.0251   14.2785   14.6337   14.4292   13.8759   13.1149   12.2428   11.3248

WW(:,:,C)

ans =

         0    0.4530    0.2444    0.1432    0.1527    0.3324    0.2740    0.3953
    0.4530         0    0.5379    0.3161    0.3075    0.2222    0.4610    0.4163
    0.2444    0.5379         0    0.5821    0.4299    0.1313    0.4198    0.2716
    0.1432    0.3161    0.5821         0    0.4809    0.0853    0.3204    0.1824
    0.1527    0.3075    0.4299    0.4809         0    0.1288    0.5099    0.2729
    0.3324    0.2222    0.1313    0.0853    0.1288         0    0.2501    0.4646
    0.2740    0.4610    0.4198    0.3204    0.5099    0.2501         0    0.5343
    0.3953    0.4163    0.2716    0.1824    0.2729    0.4646    0.5343         0
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 5 + 5 + 5 非常感谢您

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

28
ywh19860616 发表于 2012-5-10 22:36:51 |只看作者 |坛友微信交流群
epoh 发表于 2012-5-10 21:57
distance_wm.m已经标准化
对求出的Wij执行标准化
恐怕重复
epoh老师,谢谢。能否根据ZZmat的每行都分别找出最大值的位置,而不是对ZZmat矩阵整体找最大值?
其实我是想对Xij的每行分别运行一次的,但是这样操作量太大,因此才让您帮忙修改的,用循环实现。

是的,我明白您说的,程序中的确提到:
   results.W     = (n x n) sparse row-standardized weight matrix
例如,我把results.W和normw函数得出的结果对比了,不一致:
load ct_data   
result = distance_wm(yc,xc);   
Xij=result.dista
Xij =
         0   26.3976   46.9654   64.7889   62.6534   36.7131   43.1493   30.9348
   26.3976         0   20.6691   38.3926   39.3141   50.1330   25.8122   29.2114
   46.9654   20.6691         0   18.0368   28.1406   67.6762   28.9354   43.4492
   64.7889   38.3926   18.0368         0   24.4042   82.0487   37.9407   56.7230
   62.6534   39.3141   28.1406   24.4042         0   68.3261   22.4538   43.2943
   36.7131   50.1330   67.6762   82.0487   68.3261         0   46.2011   25.5506
   43.1493   25.8122   28.9354   37.9407   22.4538   46.2011         0   20.8906
   30.9348   29.2114   43.4492   56.7230   43.2943   25.5506   20.8906         0
Xij_1=result.W
Xij_1=   
   (2,1)       0.3333
   (1,2)       1.0000
   (3,2)       0.5000
   (7,2)       0.3333
   (2,3)       0.3333
   (4,3)       0.5000
   (3,4)       0.5000
   (5,4)       0.5000
   (4,5)       0.5000
   (7,5)       0.3333
   (8,6)       0.5000
   (2,7)       0.3333
   (5,7)       0.5000
   (8,7)       0.5000
   (6,8)       1.0000
   (7,8)       0.3333

Xij_row=normw(Xij)

Xij_row =
         0    0.0847    0.1507    0.2079    0.2011    0.1178    0.1385    0.0993
    0.1148         0    0.0899    0.1670    0.1710    0.2180    0.1123    0.1270
    0.1850    0.0814         0    0.0710    0.1108    0.2666    0.1140    0.1711
    0.2010    0.1191    0.0560         0    0.0757    0.2545    0.1177    0.1760
    0.2171    0.1362    0.0975    0.0846         0    0.2368    0.0778    0.1500
    0.0975    0.1331    0.1797    0.2178    0.1814         0    0.1227    0.0678
    0.1914    0.1145    0.1284    0.1683    0.0996    0.2050         0    0.0927
    0.1237    0.1168    0.1738    0.2268    0.1731    0.1022    0.0835         0



一份耕耘,一份收获。

使用道具

29
epoh 发表于 2012-5-10 22:46:53 |只看作者 |坛友微信交流群
ywh19860616 发表于 2012-5-10 22:36
epoh老师,谢谢。能否根据ZZmat的每行都分别找出最大值的位置,而不是对ZZmat矩阵整体找最大值?
其实 ...
我没看懂底下怎么得来
Xij_1=result.W
Xij_1=   
    (2,1)       0.3333
    (1,2)       1.0000
    (3,2)       0.5000
    (7,2)       0.3333
    (2,3)       0.3333
    (4,3)       0.5000
    (3,4)       0.5000
    (5,4)       0.5000
    (4,5)       0.5000
    (7,5)       0.3333
    (8,6)       0.5000
    (2,7)       0.3333
    (5,7)       0.5000
    (8,7)       0.5000
    (6,8)       1.0000
    (7,8)       0.3333

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 5 + 5 + 5 谢谢您的关注

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

30
ywh19860616 发表于 2012-5-10 23:18:33 |只看作者 |坛友微信交流群
epoh 发表于 2012-5-10 22:46
我没看懂底下怎么得来
Xij_1=result.W
Xij_1=
epoh老师,就是distance_wm函数的返回结果的results.W
%          results.dista = (n x n) matrix of pairwide distances
%          results.W     = (n x n) sparse row-standardized weight matrix
%          results.dw    = (n x n) matrix of neighbors (0,1)

您指的原程序已经标准化是指W = sparse(normw(dw)) 吗?我以为是指results.W.
我一开始没有看到这个,呵呵,那我可以直接在distance_wm里取出Wij=normw(results.dista)就行。

另外,epoh老师,能否根据ZZmat的每行都分别找出一个最大值及其对应位置,而不是对ZZmat矩阵整体找最大值?load ct_data   
result = distance_wm(yc,xc);   
Xij=result.dista ;
[n1,m1]=size(Xij)         
Wij=result.Wn ;     
dista = GeogDistance(yc,xc);            
k=0.01:0.01:0.09;
s=length(k);
ZZmat=zeros(n1,length(k));
[n,m]=size(dista);
WW=zeros(n,m,s);
for s =1:length(k)
WWij=zeros(n,m);
for i = 1:n
    for j = 1:m
     if (i~=j)
        WWij(i,j)=exp(-k(s)*dista(i,j));  
     elseif (i==j)
        WWij(i,j)=0;
     end %end if
    end  %end i
      WW(:,:,s)=WWij;
end %end j
   for p = 1:n1
     [GGI,ZZG,ZZ]=Getis_revised(WWij,Xij(p,:));
     ZZmat(p,s)=ZZ;
   end % end p
end %end s
ZZmat

for q=1:n1
%[value, location] = max(ZZmat(:))
[value, location] = max(ZZmat(q,:))
%[R,C] = ind2sub(size(ZZmat),location)
end

这样可以取出每一行最大值所在location,但是如何同时根据s(表示变量)和location 取出WW?
比如对应s=1,即数据的第一行,因为k=0.01:0.01:0.09,所以就算出来有9个WW,根据ZZmat第一行最大值,可以取出一个矩阵。
  对应s=2,同时可以取出一个矩阵。
....
         s=9,也取出一个矩阵。






一份耕耘,一份收获。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-14 04:11