楼主: appleqiuqiu
3247 8

[问答] 根据条件生成一个具有0、1feature的矩阵 [推广有奖]

  • 0关注
  • 1粉丝

副教授

41%

还不是VIP/贵宾

-

威望
0
论坛币
3631 个
通用积分
2.5000
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
4191 点
帖子
133
精华
0
在线时间
1514 小时
注册时间
2010-4-27
最后登录
2022-6-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我现在想用matlab生成这样一个矩阵Z:Z是一个n*m的矩阵(比如说这里n=200,m=5),最开始Z=zeros(n,m),现在我要在矩阵的某些地方赋值为1,具体的:最终我要保证矩阵的每一列相加等于一个确定的数,这个数来源于之前的多项分布,例如:N=mnrnd(n,P),这里的P是m*1的向量,代表概率,举个具体的例子:假设N=[24 22 33 63 58],那么矩阵Z的第一列所有值相加应该等于24,第二列等于22 ,第三列等于33,以此类推。接下来的一步是,由于Z是0、1feature的矩阵,对于第一列我要把24个1随机分配到200行中,然后对于第二列我要把22个1随机分配到剩余的176(200-24)行中,对于第三列,把33个1随机分配到剩余154(176-22)行中,依次类推。

我把我已有的程序写上:
P=1+rand(m,1);P=P/sum(P);                 %生成P向量,m*1维的,且相加等于1
N=mnrnd(n,P);                                       %生成多项分布
Z=zeros(n,m)
for j=1:m
     sum(Z(:,j))=N(j)

接下来就不会写了。。。。。跪求各位高人指点,在下感激不尽!!!

PS:不知道我SAS专版的好友们有没有精通matlab的。。。
二维码

扫码加我 拉你入群

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

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

关键词:feature Feat FEA Eat 精通matlab matlab

沙发
scarfacetony 发表于 2013-7-24 17:10:19 |只看作者 |坛友微信交流群
爱莫能助,不懂……
看了这个视频,我于是有了进股市的信心!
https://bbs.pinggu.org/thread-2787427-1-1.html

使用道具

藤椅
appleqiuqiu 发表于 2013-7-24 17:19:12 |只看作者 |坛友微信交流群
scarfacetony 发表于 2013-7-24 17:10
爱莫能助,不懂……
仍然感谢回帖!

使用道具

板凳
appleqiuqiu 发表于 2013-7-24 17:48:06 |只看作者 |坛友微信交流群
自己顶贴,求高手相助!!!

使用道具

报纸
ziyenano 发表于 2013-7-24 18:18:38 |只看作者 |坛友微信交流群
n=10;
m=5;
P=1+rand(m,1);
P=P/sum(P);                 
N=mnrnd(n,P);                                      
Z=zeros(n,m);

for i=1:m;
    tmp=unifrnd(0,1,n,1);
    tmp(:,2)=zeros(n,1);
    tmp(1:N(i),2)=1;
    sortrows(tmp,1);
    Z(:,i)=tmp(:,2);
end



使用道具

地板
appleqiuqiu 发表于 2013-7-24 20:12:17 |只看作者 |坛友微信交流群
ziyenano 发表于 2013-7-24 18:18
n=10;
m=5;
P=1+rand(m,1);
多谢牛人!我还在研究你的for语句。。。如果有注释就好了。不过我运行了一下,发现生成的Z好像不太符合我的描述,按照要求,每一行只能存在一个1,现在的Z输出发现前面一些行全都是1

使用道具

7
appleqiuqiu 发表于 2013-7-24 20:12:47 |只看作者 |坛友微信交流群
ziyenano 发表于 2013-7-24 18:18
n=10;
m=5;
P=1+rand(m,1);
多谢牛人!我还在研究你的for语句。。。如果有注释就好了。不过我运行了一下,发现生成的Z好像不太符合我的描述,按照要求,每一行只能存在一个1,现在的Z输出发现前面一些行全都是1

使用道具

8
appleqiuqiu 发表于 2013-7-24 21:52:29 |只看作者 |坛友微信交流群
ziyenano 发表于 2013-7-24 18:18
n=10;
m=5;
P=1+rand(m,1);
你的想法启发了我,我想改一下就是我要的形式:

%初始化Z
tmp1=zeros(n,m);
for k=1:m
    k1=sum(N(1:k-1))+1;
    k2=sum(N(1:k));
    tmp1(k1:k2,k)=tmp1(k1:k2,k)+1;
end
tmp2=unifrnd(0,1,n,1); %生成n*1的(0,1)之间连续分布的随机数
tmp=[tmp2 tmp1]; %将两个矩阵拼接起来
Z2=sortrows(tmp); %按照矩阵的第一列升序排列,目的就是对后面的列实现随机排列
Z2(:,1)=[]; %去掉第一列,剩下的就是我们需要的Z2矩阵

最后还是非常感谢你!为什么你的SAS和matlab都可以这么好。。。膜拜!

使用道具

9
ziyenano 发表于 2013-7-25 00:08:37 |只看作者 |坛友微信交流群
appleqiuqiu 发表于 2013-7-24 20:12
多谢牛人!我还在研究你的for语句。。。如果有注释就好了。不过我运行了一下,发现生成的Z好像不太符合我 ...
没看见这个需求呐,不过楼主自己已经解决了~

使用道具

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

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

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

GMT+8, 2024-5-1 05:43