Matlab 确定数组中有重复元素的位置的问题 希望各位高手帮忙指点 万分感谢!!置

举个例子来说明吧~~有两个一维数组a :[1,2,2,3 ,2,1] b:[0.2, 0.1 ,0.1 ,0.3 ,0.1 ,0.2] 其实数组a中各元素的概率就是数组b中各元素~~,我想编程实现数组a中不同重复的元素位置,然后根据这些位置,将数组b中对应的元素相加~~形成 数组a存随机变量X所有可能的值 数组b对应数组a中各个元素的概率 也就是将上述的数组a 变为[1,2,3 ] 则数组b为[0.4 0.3 0.3]
谢谢了 想要详细的程序 各位高手帮帮我吧 ~~好的话,我再追加悬赏 10-20 分
当数组a为
a=[1 1 3 2 1 2]
数组b为
b=[0.1 0.1 0.2 0.25 0.1 0.25]
数组a与数组b有着对应的关系: 即 数组a中各个元素的概率分别对应与数组b中的各个元素;
我想实现把数组a变为a=[1 3 2] 这里不改变顺序 仅除去重复的元素!
数组b变为b=[0.3 0.2 0.5] 这里0.3 代表1的概率 0.2 代表3 的概率 0.5代表2的概率;

clear
a=[1,2,1,4,1,3,2,5,2,3];
b=[0.1,0.05,0.15,0.1,0.15,0.05,0.1,0.05,0.15,0.1];
new_a=[]; %a中不同重复的元素
new_b=[]; %new_a中各个元素的概率
new_a(1)=a(1); %初始化第一个元素
new_b(1)=0;
for i=1:length(a)
for j=1:length(new_a)
if a(i)==new_a(j) %第i个元素是否已存在
new_b(j)=new_b(j)+b(i); %若存在,将第i个元素概率添加到已出现的new_a中
break; %进入下一个元素判断
else
if j==length(new_a) %是否循环到已存在new_a的最后一个数
new_a(j+1)=a(i); %若是,则第i个元素未出现,将其添加到new_b中
new_b(j+1)=b(i); %初始化new_b中新元素的概率
end
end
end
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-10
花了一个小时帮你做的,你看看吧 result1是数组 result2是概率
a=[2,5,23,8,5,7,8,8,23,89];
b=zeros(numel(a)*2,1);%建立一个长度是a的2倍的数组b,数组的奇数位记录a具有的元素,偶数位记录对应元素的个数
b(1)=a(1);
b(2)=1;
now=1;
for index1=2:numel(a)
for index2=1:2:now
if a(index1)-b(index2)==0%如果a中的数和b之前记录的某个数是一样的话那么在b数组下一位自增1
b(index2+1)=b(index2+1)+1;%个数加1
break;
end
end
if index2==now%b之前的数没有与a中当前元素相匹配则在b后面开辟2个空间
now=now+2;
b(now)=a(index1);
b(now+1)=1;
end
end
for index=2:2:numel(b)%b中偶数位不为零则元素存在,如果b中偶数位是零则元素不存在。记录b中偶数位刚好为零的索引
if b(index)==0
break;
end
end
result1=b(1:2:index-3)
result2=b(2:2:index-2)/numel(a)

你看看能不能也帮帮我http://zhidao.baidu.com/question/235377169.html你也是做图像的吗
第2个回答  2011-03-10
唔,还行。
重开两个数组,一个aa,一个bb。
aa从a的第一个开始,往里放元素。
bb用来累加相应概率
相似回答