假设我有一个矩阵数组表格.

uvv = np.array([[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]])

我将重点放在值全为零的行上,例如row 2 然后,我希望在row 2的某一列中为random 1 two or three times,但该列不能在其他行中出现1.根据uvv表,我可以在第1,2,3,7,8,9,10,11,12,14,16,18列随机1/row 2.

以下是在row 2的第2, 14, 18列中添加随机1时我的目标的示例:

tem = np.array([[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
                [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]])

谢谢.

推荐答案

您可以使用布尔掩码查找行和可用列:

m1 = ~uvv.any(axis=1)  # rows with all zeroes
m2 = ~uvv.any(axis=0)  # columns with all zeroes

rows = np.nonzero(m1)[0]  # find rows to fill
cols = np.nonzero(m2)[0]  # find available columns

for row in rows:
    idx = np.random.choice(cols, np.random.randint(1, 4), replace=False)
    uvv[row, idx] = 1
    cols = np.setdiff1d(cols, idx)

输出:

>>> uvv
array([[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]])

# rows to fill
>>> rows
array([1])

# before the loop
>>> cols
[ 0  1  2  6  7  8  9 10 11 13 15 17]

# after the loop
[ 0  1  2  6  8  9 10 11 13 15]  # col 7 and 17 are not available now

Python相关问答推荐

如何随着收件箱的增加动态添加到HTML表的右下角?

try 从网站获取表(ValueRight:如果使用所有纯量值,则必须传递索引)

如何从同一类的多个元素中抓取数据?

如何从维基百科的摘要部分/链接列表中抓取链接?

隐藏QComboBox的指示器(qdarkstyle)

如何修复fpdf中的线路出血

try 使用tensorFlow.keras.models时optree Import错误

按日期和组增量计算总价值

使用Python C API重新启动Python解释器

Python中的负前瞻性regex遇到麻烦

LAB中的增强数组

无法使用equals_html从网址获取全文

配置Sweetviz以分析对象类型列,而无需转换

pandas DataFrame GroupBy.diff函数的意外输出

将特定列信息移动到当前行下的新行

如何在Python脚本中附加一个Google tab(已经打开)

导入...从...混乱

调用decorator返回原始函数的输出

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

使用Python查找、替换和调整PDF中的图像'