为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星点点滴滴 2022-06-22 22:07:50
假设我有这个矩阵:> 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 放在所有列中。为什么 ?
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超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

此外,更好的解决方案是使用 sum


for i in range(len(mat)):

  if (sum(mat[i]) == 0):

     mat[i][0] = 1


查看完整回答
反对 回复 2022-06-22
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

另一种解决方案是使用 评估行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)


查看完整回答
反对 回复 2022-06-22
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

mat[mat.sum(axis=1).astype(np.bool).flat] = 1



查看完整回答
反对 回复 2022-06-22
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信