假设我有这个矩阵:> 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
拉风的咖菲猫
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)
添加回答
举报
0/150
提交
取消