假设我有这个矩阵:
> 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/