声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3196|回复: 11

[编程技巧] 矩阵维度不同导致无法赋值

[复制链接]
发表于 2009-4-1 17:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
编写了一个程序 总是报这个错??? Subscripted assignment dimension mismatch.
Error in ==> first at 34
    nminpt(ii,:)=n
不知道怎么解决。。。。。。我的本意是想内部循环做一次 然后算出一个结果来放在一个矩阵的第一个位置里 第二次内部循环算的结果放在第二个位置里 以此类推 然后当外部循环做完以后得到一个矩阵
程序如下

a=load('1.txt'); na=length(a); ids=0; minpts=10;
sort(dist); na=length(a); nminpts=zeros(na,1);
dista=zeros(na,1); disa=zeros(na,1); nminpt=zeros(na,1);
rist=zeros(na,1); ird=zeros(na,1); lof=zeros(na,1);
for ii=1:na,
   for jj=ii+1:na, ids=ids+1;
      nminpts(ids)=sqrt( sum( (a(ii,:)-a(jj,:)).^2 ) );
          dista(ids)=sqrt( sum( (a(ii,:)-a(jj,:)).^2 ) );
   end;
   sort(dista); disa(minpts); disa=unique(dista,'rows');
   k=ismember(dista,disa(minpts));
   n=find(k); nminpt(ii,:)=n
   rist=max(disa(minpts),nminpts); na=length(rist); ird(ii,:)=1/(sum(rist)/n)
end
ird

先谢谢各位前辈

[ 本帖最后由 ChaChing 于 2009-4-5 21:34 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-4-3 01:38 | 显示全部楼层

矩阵维度不同导致无法赋值

关键语句是这样的:
k=ismember(dista,disa(minpts));
n=find(k); nminpt(ii,:)=n
k是一个判断矩阵dista中元素和disa(minpts))这个数是否相同的函数
然后通过find找出这个数的矩阵下标来

但是总是报??? Subscripted assignment dimension mismatch.
Error in ==> first at 34
    nminpt(ii,:)=n
也就是说矩阵维数不对 不能赋值
之前看到过个这样的例子 后来是套用函数解决的 但是我这个写成n=find(find(k))也不对。。。。

[ 本帖最后由 ChaChing 于 2009-4-5 21:35 编辑 ]
发表于 2009-4-3 08:11 | 显示全部楼层
个人水平有限, 看不清LZ的问题, 建议楼主说再清楚些或给齐资料!
发表于 2009-4-3 11:38 | 显示全部楼层
n=find(k);
for ii=1:length(n)
    nminpt(ii,:)=n(ii)
end
 楼主| 发表于 2009-4-3 15:46 | 显示全部楼层
谢谢~但是结果也不太对。。我正在单步查错中。。。
现在的程序是这样的(暂时删掉了与ird相关的部分运算)

a=load('1.txt'); na=length(a); ids=0; minpts=10; na=length(a);
nminpts=zeros(na,1);
dista=zeros(na,1); disa=zeros(na,1);nminpt=zeros(na,1);
rist=zeros(na,1); ird=zeros(na,1); lof=zeros(na,1); n=zeros(na,1);
for ii=1:na,
   for jj=ii+1:na, ids=ids+1;
      nminpts(ids)=sqrt( sum( (a(ii,:)-a(jj,:)).^2 ) );
          dista(ids)=sqrt( sum( (a(ii,:)-a(jj,:)).^2 ) );
   end;
   sort(dista); disa(minpts); disa=unique(dista,'rows');
   k=ismember(dista,disa(minpts));
   n=find(k);
   for ii=1:length(n), nminpt(ii,:)=n(ii), end   
end

最后得到的是很多个矩阵而不是nminpt一个矩阵 数字也不大对 我在考虑中。

其实是这样 n只是为了找到dista中disa(minpts)这个值在第几位 所以它得到的是一个数字 然后放在矩阵的一行里应该是没问题的啊 因为矩阵我也设的是就1位的
但是我想不出来有什么更好的方法能找到disa(minpts)这个值在dista矩阵中的位置

[ 本帖最后由 ChaChing 于 2009-4-5 21:52 编辑 ]
发表于 2009-4-3 18:10 | 显示全部楼层

回复 7楼 baojiea99 的帖子

最后得到的是很多个矩阵??不太可能吧?nminpt变成3维的了?具体说清楚啊
另外,你的程序里ids是不是内循环完了后应该重新赋0啊?

[ 本帖最后由 ydlcsu 于 2009-4-3 18:22 编辑 ]
 楼主| 发表于 2009-4-3 23:18 | 显示全部楼层

回复 9楼 ydlcsu 的帖子

是这样 我现在在想到底要怎么做才能找到dista中disa(minpts)这个值在第几位..原本想的是用k=ismember(dista,disa(minpts));
找到两个矩阵相同的元素 然后通过find来找到下标 但是就是不行 我单输出n的时候就是一个数字
这么套在循环里就可能出现问题。。结果是大堆的循环
我就不粘过来了 太多了
发表于 2009-4-4 00:12 | 显示全部楼层
你写这么一大段都没有回答我的问题,让别人怎么帮你。真是晕。。
1。最后结果得到很多个矩阵??到底具体是是什么个情况?什么叫做很多个矩阵?你到底得到了个什么结果?
2。ids是不是内循环完了后应该重新赋0?

根据你第一个帖子里说的报错,很显然在某些情况下,你dista中不止一个值等于disa(minpts)
另外
for ii=1:length(n)
    nminpt(ii,:)=n(ii)
end   
nminpt每次的结果会覆盖上次的结果

[ 本帖最后由 ydlcsu 于 2009-4-4 00:16 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2009-4-4 00:40 | 显示全部楼层

回复 11楼 ydlcsu 的帖子

nminpt =

    17
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0

就是一直是这样的矩阵 很多...到最后矩阵是
nminpt =

     2
    14
    38
    52
    61
   103
   109
   185
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0

恩 我要找到的是dista中最后一个等于disa(minpts)的值
其实这是一个lof(基于密度分布异常点挖掘)的程序
ids是应该重新赋值为0 因为一次内循环求的是一个点与其他所有点的距离

另外 是我没说清楚 真不好意思

[ 本帖最后由 ChaChing 于 2009-4-5 22:06 编辑 ]
发表于 2009-4-4 12:53 | 显示全部楼层
for ii=1:length(n)
    nminpt(ii,:)=n(ii)
end   
你上面这个循环中的语句后面没有加分号(;),没运行一次就会显示一次nminpt,自然会显示很多次,你在命令台看到的很多矩阵是正常的。另外,根据你写的程序,nminpt每次的结果会覆盖上次的结果,也就是你没法得到你想要的结果,这也是你程序的错误之一(另外一个就是ids应该重新赋0)。自己再好好想想,修改程序吧

[ 本帖最后由 ydlcsu 于 2009-4-4 12:55 编辑 ]
 楼主| 发表于 2009-4-4 21:25 | 显示全部楼层

回复 14楼 ydlcsu 的帖子

好的 谢谢。。我再想想看吧 单步走一走
发表于 2009-4-5 22:12 | 显示全部楼层
我不知该说什麽? 花太多时间编辑并看LZ的帖了!
没实质帮忙, 但真的建议楼主加强发问题方式!?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 10:12 , Processed in 0.069899 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表