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

标签 python arrays 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 放入所有列中。为什么?

最佳答案

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

关于python - 如果所有列都为 0,则用 1 填充 numpy 矩阵的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58391009/

相关文章:

python - 使用pandas进行json文档过滤

python - 如何在弹性 beantalk 上更新 python Flask 应用程序?

javascript - 如何使用字符串键在 Ember 模板中查找关联数组/对象值

arrays - 如何将整数分解为 2 的幂数组?

python - 无法为 Python 3.6 pip 安装 sklearn

python - Heroku App 立即崩溃并出现 R10 和 H10 错误

Python Scrapy FormRequest 回调没有发生

python - 将 numpy 数组作为 Pandas 中的列保存/加载到 csv 文件

javascript - 如何解释结果(理解js中的let和var)

python - 根据元素出现在另一个数组中的次数,删除 NumPy 数组中元素的最高效方法是什么?