我正在解决一个问题,即如果MxN矩阵中的元素为0,则整个行和列都设置为0.
首先,引入两个变量 zero_row 和 zero_col 来分别存储需要设置为0的行和列。接下来,我循环遍历矩阵中的元素,将zero_row中行的位偏移量设置为零,并将zero_col中列的位偏移量设置为1(如果元素等于0)。然后,我再次遍历矩阵并设置每个行和列如果在zero_row和zero_col中将位偏移设置为1,则为零。
zero_row和zero_col最初设置为0。所以我认为它是一个整数类型。我正在使用64位计算机。因此我认为我可以设置的最大位是64位(每个整数)。我很好奇为什么代码仍能正常使用3x144数组。列大小144位明显大于64位... Python会自动进行“类型转换”吗?或者也许任何人都可以指出我解释根本的文件。感谢。
import numpy
class Matrix:
def __init__(self):
pass
def check_matrix(self, input_mat):
zero_row = 0
zero_col = 0
for row in xrange(len(input_mat)):
for col in xrange(len(input_mat[row])):
if zero_row >> row & 1 == 0 or zero_col >> col & 1 == 0:
if input_mat[row][col] == 0:
zero_row = zero_row | 1 << row
zero_col = zero_col | 1 << col
return [zero_row, zero_col]
def set_matrix(self, input_mat, zero_row, zero_col):
for row in xrange(len(input_mat)):
for col in xrange(len(input_mat[row])):
if (zero_row >> row) & 1 == 1 or (zero_col >> col) & 1 == 1:
input_mat[row][col] = 0
return input_mat
m = Matrix()
# input_arr = numpy.array([[1,1,1], [2, 0, 2], [3, 3, 3]])
# input_arr = numpy.array([[1,1,1], [2, 2, 2], [0, 3, 0]])
input_arr = numpy.array([
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,3,0]
])
[zero_row, zero_col] = m.check_matrix(input_arr)
print bin(zero_row), " ", bin(zero_col)
print m.set_matrix(input_arr, zero_row, zero_col)
结果:
0b100 0b101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[[ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0]
[ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 2 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 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 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 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 0 0 0 0 0 0 0 0 0]]