如果所有列都为 0,则用 1 填充 numpy 矩阵的特定列

假设我有这个矩阵:


> mat

  index   values

    0   0 0 0 0 0

    1   0 0 0 0 0

    2   0 1 0 0 0

    3   0 1 0 0 0

    4   0 0 0 0 0

    5   0 0 0 0 0

    6   0 0 1 0 0

    7   0 0 1 0 0

    8   0 0 0 0 0

如果迭代行中的所有列都是 0,我想用值 1 填充 mat 的第一列。


所以那个垫子看起来像这样:


> mat

  index   values

    0   1 0 0 0 0

    1   1 0 0 0 0

    2   0 1 0 0 0

    3   0 1 0 0 0

    4   1 0 0 0 0

    5   1 0 0 0 0

    6   0 0 1 0 0

    7   0 0 1 0 0

    8   1 0 0 0 0

这是我尝试过的:


for i in range(len(mat)):

   for j in range(5):

       if (mat[i][j]!=1):

           mat[i][0]=1

但这会将 1 放在所有列中。为什么 ?


繁星点点滴滴
浏览 167回答 3
3回答

牛魔王的故事

for i in range(len(mat)):  for j in range(5):      if (mat[i][j]!=1):          mat[i][0]=1这不起作用,因为如果任何列为零,它会将第一列设置为 1。如果所有列都有 0,您希望将第一列设置为 1这会起作用for i in range(len(mat)):  for j in range(5):      if (mat[i][j]==1):          break;      mat[i][0] = 1此外,更好的解决方案是使用 sumfor i in range(len(mat)):  if (sum(mat[i]) == 0):     mat[i][0] = 1

拉风的咖菲猫

另一种解决方案是使用 评估行numpy.any():for i in range(len(mat)):   mat[i][0] = 0 if np.any(mat[i]) else 1或者干脆没有for循环mat[:,0] = ~np.any(mat, axis=1)

哆啦的时光机

mat[mat.sum(axis=1).astype(np.bool).flat] = 1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python