全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
4433 4
2014-03-06
是模拟动物活动的 ,现在有5个地点(生境) 每个地点中的动物可以随机迁移到其他的地点

对于第一个地点里,假如有四个动物,
可以用随机数randi产生的目的地矩阵:
r= randi(5,[1, 4]);
假如得到 r = [3,3,1,2];

那么对于目的地来说,第1和第2个地点进入了1个动物,而第3个地点进入了2个动物
我该如何实现
Immi = [1,1,2,0,0]; Immi 表示迁入数

我如果用Immi(r) = 1; 那么得到的是Immi = [1,1,1,0,0]
就会少了一个动物,因为随机数产生的矩阵中有一个重复

求大侠赐教,不甚感谢!!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-3-6 14:50:38
特来抛砖引玉
参考了一下matlab论坛的相关讨论,尤其是关于hist和unique的命令。
特此声明
clear;
r = randi(5,1,4)
[m, n] = hist(r,unique(r));
Immi = zeros(1,5);
Immi(n) = m


值得说明的是,hist返回的两个参量分别是r中的各个唯一值出现了m次,分别是X、Y、Z……记录在n;
zeros那个就是纯粹为了适应可能没有5的情形而造的
然后是矩阵赋值,就不多说了

结果如下
复制代码



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-6 17:23:12
Benlaron 发表于 2014-3-6 14:50
特来抛砖引玉
多谢啊,刚才用你给的code做了一下,确实不错
我之前自己尝试用循环,但是我要运行几十万次,循环太慢了

不过,我后来想到,这个过程,其实可以直接简化为
有十个动物(要迁出的),把它们随机分在n个组(每个组相当于一个目的地),组里可以为0,就可以了
不知道有没有直接这样的函数,我自己查了一下也没有查到

多谢啊!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-6 18:36:44
Benlaron 发表于 2014-3-6 14:50
特来抛砖引玉
刚才又试了一下,有时候会出现问题
比如如果 r = [18,18]
那么应该用您的code,我们期望得到 m = 2, n =18
但结果确输出了两个1*18的一个矩阵
不知道咋回事诶
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-7 07:50:53
baixiangnju 发表于 2014-3-6 18:36
刚才又试了一下,有时候会出现问题
比如如果 r = [18,18]
那么应该用您的code,我们期望得到 m = 2, n  ...
那就稍微改改咯,我就以为你的动物数就五个。
那就可以这样

clear;
aniNum = 4   %动物个数
plaNum = 5   %迁出地个数
r = randi(plaNum,1,aniNum)
[m, n] = hist(r,unique(r));
Immi = zeros(1,plaNum);   %为了让r中没出现的元素
Immi(n) = m

那么如果r = [18, 18]
就是说此时plaNum = 18,aniNum = 2
那输出的r 就是1×2的,而Immi就是1×18的。如下:
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群