如何生成指定密度的0-1随机矩阵
本文介绍一种高效、可复用的方法,通过python函数创建n行m列的二值矩阵,精确控制1的个数(或密度),避免重复赋值和概率偏差问题。
本文介绍一种高效、可复用的方法,通过python函数创建n行m列的二值矩阵,精确控制1的个数(或密度),避免重复赋值和概率偏差问题。
在科学计算、模拟实验或机器学习数据生成中,常需构造具有精确稀疏度(即指定数量或比例的1)的0-1矩阵。与简单使用random.random() < d进行概率采样不同,本方案确保严格满足目标密度d——即矩阵中恰好包含d个1(而非期望值为d),从而消除随机波动带来的不确定性。
以下是推荐实现:
import random
def create_matrix(n, m, d):
"""
创建 n 行 m 列的 0-1 矩阵,其中恰好包含 d 个 1。
参数:
n (int): 行数
m (int): 列数
d (int): 1 的总个数(必须满足 0 <= d <= n*m)
返回:
list[list[int]]: 二维列表形式的二值矩阵
"""
total_cells = n * m
if not isinstance(d, int) or d total_cells:
raise ValueError(f"d must be an integer between 0 and {total_cells}, inclusive")
# 初始化全零矩阵
matrix = [[0] * m for _ in range(n)]
# 随机选择 d 个不重复的位置置为 1
positions = random.sample(range(total_cells), d)
for idx in positions:
row = idx // m
col = idx % m
matrix[row][col] = 1
return matrix
# 示例:生成 4×5 矩阵,含恰好 10 个 1(密度为 10/20 = 0.5)
result = create_matrix(4, 5, 10)
for row in result:
print(row)
✅ 优势说明:
- 使用 random.sample() 直接无放回地抽取 d 个唯一索引,避免循环重试,时间复杂度稳定为 O(d),远优于原答案中可能陷入长等待的 while 循环;
- 支持边界校验(如 d 超出合法范围时抛出清晰异常),提升鲁棒性;
- 若需按密度比例(如 d=0.3 表示 30% 的 1),可扩展为:
if isinstance(d, float) and 0.0 <= d <= 1.0: d = int(round(d * n * m))
⚠️ 注意事项:
- 原提问代码存在逻辑错误:内层循环重复生成 m 个长度为 m 的行,导致结果为 n × m × m 维嵌套结构;
- 概率填充法(如 random.random() < density)虽简洁,但无法保证精确计数,仅适用于对密度容忍一定方差的场景;
- 对超大规模矩阵(如百万级元素),建议改用 NumPy 实现以获得更好性能与内存效率。
该函数简洁、可靠、可扩展,是构建可控稀疏结构的理想基础工具。
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
英特尔或带来Intel 14A2工艺 进一步提升晶体管密度
2026-07-11在2024年2月21日举办IFSDirectConnect活动中,英特尔分享了Intel18A工艺之后的计划,公布了新的工艺路线图,新增了Intel 14A制程技术和数个专业节点的演化版本。在Intel14A上,英特尔将首次引入High-NAEUV光刻技术,预计2028年试产,2029年量产。 据Wccftech报道,台积电(TSMC)和三星都在积极推动1.4nm制程节点的开发,为此英特尔正在考虑...
鸣潮矩阵重组第二关攻略
2026-07-07就在最近鸣潮上线了3.5版本的,本次版本更新了许多内容,有新的角色,武器和地图,还有新活动,那么有不少小伙伴好奇矩阵重组活动怎么过,下面就来告诉大家矩阵重组第二关攻略。 鸣潮矩阵重组第二关攻略 先重申一遍核心规矩,卡关九成是没记牢交替逻辑,别嫌啰嗦: 开局第一下只能点矩阵第一行代码,别的格子点不动,别白费力气乱戳下面; 选完一块代码,下一个必须点同竖列;再下一步切同一横排,行列来回循环,不能连续同...
鸣潮矩阵重组第三关攻略
2026-07-07就在最近鸣潮上线了3.5版本的,本次版本更新了许多内容,有新的角色,武器和地图,还有新活动,那么有不少小伙伴好奇矩阵重组活动怎么过,下面就来告诉大家矩阵重组第三关攻略。 鸣潮矩阵重组第三关攻略 先把核心规则再简单说下,卡关基本都是没吃透行列交替: 开局第一步,只能点矩阵第一行的代码,下面两行点不动; 选完一块代码,下一格必须点同竖列,再下一步切换同一横排,行、列来回轮换,不能连续同行或者同列; 缓...
鸣潮矩阵重组第四关攻略
2026-07-07就在最近鸣潮上线了3.5版本的,本次版本更新了许多内容,有新的角色,武器和地图,还有新活动,那么有不少小伙伴好奇矩阵重组活动怎么过,下面就来告诉大家矩阵重组第四关攻略。 鸣潮矩阵重组第四关攻略 先把核心规则再唠一遍,卡关基本都是没吃透行列交替逻辑,别嫌啰嗦: 开局第一个代码,只能点矩阵第一行,下面两行点不动,瞎戳纯属浪费时间; 选完一块代码,下一格必须走它同一竖列,再下一步切换同一横排,行、列来回...
鸣潮矩阵重组第五关攻略
2026-07-07就在最近鸣潮上线了3.5版本的,本次版本更新了许多内容,有新的角色,武器和地图,还有新活动,那么有不少小伙伴好奇矩阵重组活动怎么过,下面就来告诉大家矩阵重组第五关攻略。 鸣潮矩阵重组第五关攻略 先再把核心解谜逻辑说清楚,卡关十有八九是记混行列交替: 开局只能点矩阵第一行代码块,下面两行点不动,手快乱点纯浪费时间; 选完一块代码,下一格必须走它同一竖列,再下一步切换同一横排,行、列来回轮换,不能连续...
鸣潮矩阵重组第六关攻略
2026-07-07就在最近鸣潮上线了3.5版本的,本次版本更新了许多内容,有新的角色,武器和地图,还有新活动,那么有不少小伙伴好奇矩阵重组活动怎么过,下面就来告诉大家矩阵重组第六关攻略。 鸣潮矩阵重组第六关攻略 先再唠一遍核心硬性规则,卡关九成是记混行列交替逻辑,别嫌啰嗦: 开局第一个代码,只能点矩阵第一行,下面两行完全无法选中,手快瞎点纯浪费时间; 选完任意一块代码,下一格必须走它同一竖列,再下一步切换同一横排,...
鸣潮矩阵重组第一关攻略
2026-07-07就在最近鸣潮上线了3.5版本的,本次版本更新了许多内容,有新的角色,武器和地图,还有新活动,那么有不少小伙伴好奇矩阵重组活动怎么过,下面就来告诉大家矩阵重组第一关攻略。 鸣潮矩阵重组第一关攻略 一、先搞懂核心硬性规则,卡关全是没记牢逻辑 界面分三块:左侧代码矩阵、下方缓冲区、上方目标序列,通关硬性规矩一点不能乱: 开局第一下,只能点矩阵第一行的代码,别的格子点不动,别白费力气乱戳二三行。 选完第一...
开源引擎Godot宣布新规 限制AI生成用于贡献代码
2026-07-03免费开源游戏开发引擎Godot工作室宣布,GodotEngine修改新规则,重点是限制AI生成用于游戏开发时的用于贡献代码,原因是使用生成AI的拉取请求急剧增加,劣质代码增大审核工作量难以应对。 工作室表示,拉取请求的急剧增加本身是人们对Godot的贡献意识提高的征兆,对此表示欢迎,但对其庞大的件数,有资格的审核员数量不足,因此无法应对,并且,原本审核员的来源来说,开源项目、软件社区的代码贡献者不...
MiMo Code 自动测试:通过自动化生成用例模拟用户行为测试
2026-06-28MiMoCode不直接提供自动测试模块,但通过Compose模式和内置工具链支撑测试生成、执行与验证闭环;它基于代码仓库感知、多模态上下文理解、Shell工具调用及增量补全能力,动态生成可运行测试用例,并以Plan-Compose-记忆驱动三步模拟开发者终端行为。 ☞☞☞AI智能聊天,问答助手,AI智能搜索,多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ MiMoCode本身不直接提供“自动测试...
可灵AI生成视频如何控制人物姿态【干货】
2026-06-28可灵AI视频生成中姿态失真问题需通过首尾帧锚点锁定、关节点级角度设定、结构化提示词注入和运动笔刷路径绘制四重手段解决,确保人体结构约束显式锚定。 ☞☞☞AI智能聊天,问答助手,AI智能搜索,多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 您在可灵AI中生成视频时发现人物姿态歪斜、关节翻转、起始与终止姿态不一致,或动作中途突然塌肩、歪头、手肘反向弯曲——这些问题本质是姿态空间未被显式锚定,模型在自...
