如何根据列表k将零矩阵填充为1,使每行元素和匹配k对应值
生成每行和为指定值的0-1矩阵的正确实现
原代码的问题
- 每次循环直接覆盖
A为一维数组,完全没操作最初创建的n×n零矩阵 - 没有对应到每行的赋值逻辑,生成的数组和目标矩阵毫无关联
正确实现代码
import numpy as np k = [3, 2, 0, 1] n = len(k) # 创建n×n的全零整数矩阵 A = np.zeros((n, n), dtype=int) for row_idx in range(n): required_ones = k[row_idx] if required_ones > 0: # 随机挑选不重复的列索引,数量为required_ones selected_cols = np.random.choice(n, required_ones, replace=False) # 将该行的指定列设为1 A[row_idx, selected_cols] = 1 print(A)
代码说明
- 用
len(k)获取矩阵维度n,保证矩阵行数和k的元素数量一致 - 逐行处理:对每一行,根据k中对应的值确定需要填充的1的数量
- 当需要填充1时,通过
np.random.choice随机选择不重复的列位置,避免同一列重复设为1(如果允许重复可将replace设为True) - 若k中对应值为0,该行保持全0即可
示例输出(随机结果,每行和符合k的值)
[[1 0 1 1] [1 1 0 0] [0 0 0 0] [0 0 1 0]]
内容的提问来源于stack exchange,提问作者Cooper
相关产品推荐
相关产品推荐

