如何创建10×10的0-1矩阵:1的概率为1/列索引?
搞定10×10 0-1矩阵生成:定义概率向量h的正确姿势
嘿,我来帮你解决这个矩阵生成的问题!首先咱们得先明确规则:你说的“列索引”肯定是从1开始算的(不然第0列的概率会是1/0,完全不合理),所以第1列出现1的概率是1/1=1,第2列是1/2,一直到第10列是1/10。
第一步:正确定义概率向量h
h就是一个长度为10的向量,每个位置对应对应列生成1的概率。分两种常用语言给你示例:
R语言定义h
# 列索引从1到10,h的第i个元素对应第i列的概率 h <- 1 / 1:10
运行后h就是[1, 0.5, 0.333..., 0.1]这样的向量,完美对应每列的概率。
Python(用numpy)定义h
import numpy as np # 生成从1到10的序列,再取倒数得到概率向量 h = 1 / np.arange(1, 11)
得到的h和R里的是一样的,只是Python里索引从0开始,所以h[0]对应第1列的概率,h[9]对应第10列的概率。
第二步:用for循环生成矩阵
有了h之后,循环每一列,根据对应概率生成10个0/1元素就行:
R语言完整代码
# 初始化10×10的空矩阵,默认填充0 result_matrix <- matrix(0, nrow = 10, ncol = 10) # 循环每一列 for (col in 1:10) { # 用rbinom生成10个伯努利试验结果:size=1表示单次试验,prob取h[col] result_matrix[, col] <- rbinom(n = 10, size = 1, prob = h[col]) }
Python完整代码
import numpy as np # 初始化10×10的全0矩阵,类型为整数 result_matrix = np.zeros((10, 10), dtype=int) # 循环每一列(Python索引从0到9) for col_idx in range(10): # 用binomial生成10个0/1,p取h[col_idx]对应列的概率 result_matrix[:, col_idx] = np.random.binomial(n=1, p=h[col_idx], size=10)
你之前可能踩的坑
大概率是这两个问题导致向量+for循环失败:
- 索引搞混:比如把列索引从0开始算,导致概率计算错误(甚至出现除以0的报错);
- 概率不对应:循环里没有正确取h中对应列的概率,而是用了同一个概率生成所有列的元素。
只要先把h定义成和列序号一一对应的概率向量,再在循环里每列调用对应概率生成元素,就能顺利生成符合要求的矩阵啦!
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

