如何用Python的Numpy生成每行和为10的随机0-1矩阵
如何用NumPy生成每行和为10的N×M随机0-1矩阵
首先要明确:必须满足M ≥ 10,因为每行需要有10个1,矩阵列数M得至少容纳这些1,否则无法生成符合要求的矩阵。
下面提供两种高效的实现方式:
方法1:随机选择位置设为1
通过np.random.choice为每行随机挑选10个不重复的列索引,将对应位置设为1,其余保持0:
import numpy as np # 定义参数 N = 10 # 行数 M = 15 # 列数(必须≥10) target_sum = 10 # 初始化全0矩阵 result_matrix = np.zeros((N, M), dtype=int) # 逐行生成 for row_idx in range(N): # 随机选10个不重复的列索引 selected_cols = np.random.choice(M, target_sum, replace=False) result_matrix[row_idx, selected_cols] = 1 # 验证每行和 print("每行元素和:", result_matrix.sum(axis=1))
方法2:打乱固定模板行
先构造包含10个1和(M-10)个0的模板行,再对每行随机打乱顺序:
import numpy as np # 定义参数 N = 10 M = 15 target_sum = 10 # 构造单一行的基础模板 base_row = np.concatenate([np.ones(target_sum, dtype=int), np.zeros(M - target_sum, dtype=int)]) # 生成N行,每行打乱顺序 result_matrix = np.array([np.random.permutation(base_row) for _ in range(N)]) # 验证每行和 print("每行元素和:", result_matrix.sum(axis=1))
两种方法都能保证每行恰好有10个1,其余为0,且随机性均匀。如果M=10,那么矩阵每行都会是全1的数组,这也是符合要求的特殊情况。
内容的提问来源于stack exchange,提问作者misoo
相关产品推荐
相关产品推荐

