24小时热门版块排行榜    

查看: 2740  |  回复: 9

tomcat2000

金虫 (著名写手)

[求助] matlab产生随机二维矩阵,这些随机数只能是-1或者1?

怎么在matlab产生随机二维矩阵,这些随机数只能是-1或者1?比如要产生100X100矩阵。但是还要要求这个产生的随机二维矩阵中,“-1”的总个数不能超过100个。谢谢。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

awormvista

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
tomcat2000: 金币+5, 有帮助 2012-04-22 13:27:57
先随机生成一个矩阵,然后统计下小于N的数量,。。。循环。。。直到数量为100,将这些数改为-1
None
2楼2012-04-22 11:41:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiangqianzsh

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
tomcat2000: 金币+5, ★★★很有帮助 2012-04-22 13:28:07
randperm(10^4)生成1:10^4的整数的一个随机排列矩阵,<100的数据换成-1即可,之后把1*10000矩阵变成100*100的矩阵就行了
3楼2012-04-22 12:45:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzzx2008

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
tomcat2000: 金币+15, ★★★★★最佳答案 2012-04-22 13:28:12
这样的矩阵 就不能称为 随机矩阵了啊
clear;
clc;
N=10;%二维 矩阵行列值
zero_num=5;%小于零的个数
a=randint(N,N);%0 1 随机
b=reshape(a,1,N*N);% 转化一维 处理方便
c=b*2-1;%+ - 1
d=find(c<0);%寻找 < 0的 下标
for i=1:length(d)-zero_num
    c(d(i))=c(d(i))+1;%<0 的 +1
end
a=reshape(c,N,N);%回归 二维
这个程序生成的矩阵 -1集中在尾部
4楼2012-04-22 12:53:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

引用回帖:
4楼: Originally posted by zzzx2008 at 2012-04-22 12:53:07:
这样的矩阵 就不能称为 随机矩阵了啊
clear;
clc;
N=10;%二维 矩阵行列值
zero_num=5;%小于零的个数
a=randint(N,N);%0 1 随机
b=reshape(a,1,N*N);% 转化一维 处理方便
c=b*2-1;%+ - 1
d=find(c<0);% ...

这是不对的

楼主要求“随机数只能是-1或者1”,而这个最后生成的矩阵里面有0
5楼2012-04-23 10:56:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

如果楼主对-1的随机性有要求的话,这个事情可以用洗牌法来做

要求输出:随机MxN二维矩阵(随机数只能是-1或者1),要求-1的总个数小于等于K个

算法:
1. 生成临时向量:temp = ones(1, M*N)
2. 随机生成-1的个数(在1到K整数中取值):minusOnes = randi(K)
3. 把-1放入temp中:temp(1:minusOnes) = -1
4. 随机交换temp中两个值(洗牌),重复很多次(例如10000次,和M*N的规模相关):
CODE:
for i = 1:10000
    i1 = randi(M*N);
    i2 = randi(M*N);
    t = temp(i1);
    temp(i1) = temp(i2);
    temp(i2) = t;
end

5. 变回二维矩阵:OUT = reshape(temp, M, N)
6楼2012-04-23 11:12:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzzx2008

银虫 (小有名气)

引用回帖:
6楼: Originally posted by sudo at 2012-04-23 11:12:41:
如果楼主对-1的随机性有要求的话,这个事情可以用洗牌法来做

要求输出:随机MxN二维矩阵(随机数只能是-1或者1),要求-1的总个数小于等于K个

算法:
1. 生成临时向量:temp = ones(1, M*N)
2. 随机生成 ...

兄弟的想法 不错  值得考虑
看看下面 这个 如何?
clear;
clc;
N=10;%二维 矩阵行列值
zero_num=5;%小于零的个数
a=randint(N,N);%0 1 随机
b=reshape(a,1,N*N);% 转化一维 处理方便
c=b*2-1;%+ - 1
d=find(c<0);%寻找 < 0的 下标
%在这些数中随机的找lengh(d)-zero_num 个数据 改成+1
%e=randint(1,length(d)-zero_num,[1 length(d)]);
e=randperm(length(d));
f=e(1:length(d)-zero_num);
for i=1:length(d)-zero_num
    c(d(f(i)))=c(d(f(i)))+2;%<0 的 +2
end
a=reshape(c,N,N);%回归 二维
7楼2012-04-23 23:19:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tomcat2000

金虫 (著名写手)

引用回帖:
7楼: Originally posted by zzzx2008 at 2012-04-23 23:19:12:
兄弟的想法 不错  值得考虑
看看下面 这个 如何?
clear;
clc;
N=10;%二维 矩阵行列值
zero_num=5;%小于零的个数
a=randint(N,N);%0 1 随机
b=reshape(a,1,N*N);% 转化一维 处理方便
c=b*2-1;%+ - 1
...

thank you
8楼2012-04-24 07:28:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

引用回帖:
7楼: Originally posted by zzzx2008 at 2012-04-23 23:19:12:
兄弟的想法 不错  值得考虑
看看下面 这个 如何?
clear;
clc;
N=10;%二维 矩阵行列值
zero_num=5;%小于零的个数
a=randint(N,N);%0 1 随机
b=reshape(a,1,N*N);% 转化一维 处理方便
c=b*2-1;%+ - 1
...

原来还有randperm这等神物,那么可以写得很简洁了

这个函数返回一个MxN的只含有+-1的矩阵,而且里面-1的个数精确等于K
CODE:
function A = MyMatrix(M, N, K)
    A = ones(1, M*N);
    t = randperm(M*N);
    A(t(1:K)) = -1;
    A = reshape(A, M, N);

如果需要给K增加一个不确定性,比如楼主的要求:“产生100X100矩阵。但是还要要求这个产生的随机二维矩阵中,-1的总个数不能超过100个”,只需要这么调用就行了
CODE:
MyMatrix(100, 100, randi(100))

9楼2012-04-24 10:16:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

嗯,谨慎估计randperm应该也是洗牌法实现的,因为这么实现最方便
10楼2012-04-24 10:17:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tomcat2000 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +9 Ldrop2023 2026-08-13 9/450 2026-08-16 13:24 by wukun_007
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +32 医学老男孩 2026-08-13 72/3600 2026-08-16 13:15 by 医学老男孩
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 26/1300 2026-08-16 12:35 by 启萌科技
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +11 家与远方 2026-08-10 16/800 2026-08-16 10:28 by ray43
[基金申请] 有时候,自然基金真的不能太认真 (我的申报经验) +10 majunge000 2026-08-11 12/600 2026-08-16 08:18 by xli1984
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 关于Filecode分析方法 +10 majunge000 2026-08-10 13/650 2026-08-15 12:26 by hanpeng972
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[基金申请] filecode +15 documentary 2026-08-10 17/850 2026-08-14 10:08 by kissu88
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
信息提示
请填处理意见