我如何找到全零的行和列,然后将交集变为输入1(由于交集,第12行和第11列应改为1),如果没有交集,则跳过此过程?
输入:
uvv=np.array([[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
我的尝试:
m1 = ~uvv.any(axis=1) # rows with all zeroes
m2 = ~uvv.any(axis=0) # columns with all zeroes
rows = np.nonzero(m1)[0] # find rows to fill
cols = np.nonzero(m2)[0] # find available columns
2条答案
按热度按时间ngynwnxp1#
使用
np.all()
和axis=1
查找全零的行(all_zero_rows),使用axis=0
查找全零的列(all_zero_columns)。如果
any(all_zero_rows)
和any(all_zero_columns)
都是true
,这意味着有一个交集,然后我们可以使用np.where()
来找到全零的行和列索引。iklwldmw2#
要查找并填充所有可能的零行和零列之间的交叉点,请使用
np.meshgrid
来获得坐标矩阵沿着使用np.stack
+np.reshape
来获得表示所有交点的对数组。具有3个归零行和3个归零列的扩展样本: