Предположим, у меня есть матрица 100000 x 100
.
import numpy as np
mat = np.random.randint(2, size=(100000,100))
Я хочу пройти через эту матрицу, и если каждый row
содержит полностью либо 1, либо 0, я хочу изменить переменную state
на это значение. Если состояние не изменяется, я хочу установить row
значение state
. Начальное значение state
равно 0.
Наивно в цикле for
это можно сделать следующим образом
state = 0
for row in mat:
if set(row) == {1}:
state = 1
elif set(row) == {0}:
state = 0
else:
row[:] = state
Однако, когда размер матрицы увеличивается, это занимает непрактичное количество времени. Может ли кто-нибудь указать мне, как использовать numpy
, чтобы векторизовать этот цикл и ускорить его?
Так для примера ввода
array([[0, 1, 0],
[0, 0, 1],
[1, 1, 1],
[0, 0, 1],
[0, 0, 1]])
Ожидаемый результат в этом случае будет
array([[0, 0, 0],
[0, 0, 0],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])