Первый вызов set(rnum)
в print(set(rnum))
потребляет итератор rnum
.Когда вы снова используете set(rnum)
в set(rnum) | set(cnum) | set(snum)
, в итераторе больше не останется значений rnum
, поэтому set(rnum)
- пустой набор.
Вот более прямая демонстрация:
In [621]: matrix = np.matrix(np.arange(36).reshape(6, 6))
In [622]: rnum = matrix[1, :].flat
In [623]: set(rnum)
Out[623]: {6, 7, 8, 9, 10, 11}
In [624]: set(rnum)
Out[624]: set()
Вместо использования rnum
вы можете создать еще один итератор, повторив matrix[1, :].flat
:
In [625]: set(matrix[1, :].flat)
Out[625]: {6, 7, 8, 9, 10, 11}
В качестве альтернативы, пропустите использование numpy.matrix
и итераторов и просто внесите в индекс обычнуюМассив NumPy:
In [639]: a = np.arange(36).reshape(6, 6)
In [640]: set(a[1,:])
Out[640]: {6, 7, 8, 9, 10, 11}
In [641]: set(a[:,1])
Out[641]: {1, 7, 13, 19, 25, 31}
In [642]: set(a[2:4, 2:4].ravel())
Out[642]: {20, 21, 14, 15}