假設(shè)我有這個矩陣:> 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貢獻(xiàn)1830條經(jīng)驗 獲得超3個贊
for i in range(len(mat)):
for j in range(5):
if (mat[i][j]!=1):
mat[i][0]=1
這不起作用,因為如果任何列為零,它會將第一列設(shè)置為 1。如果所有列都有 0,您希望將第一列設(shè)置為 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

拉風(fēng)的咖菲貓
TA貢獻(xiàn)1995條經(jīng)驗 獲得超2個贊
另一種解決方案是使用 評估行numpy.any():
for i in range(len(mat)):
mat[i][0] = 0 if np.any(mat[i]) else 1
或者干脆沒有for循環(huán)
mat[:,0] = ~np.any(mat, axis=1)
添加回答
舉報
0/150
提交
取消