Найдите максимальную длину последовательных нулей в каждой строкеPython

Программы на Python
Ответить
Anonymous
 Найдите максимальную длину последовательных нулей в каждой строке

Сообщение Anonymous »

Моя цель — найти максимальную длину последовательных нулей в каждой строке. Например, если у меня есть тензор типа
input = torch.tensor([
[0, 1, 0, 0, 0, 1],
[0, 0, 1, 0, 1, 0],
[1, 0, 0, 0, 0, 0]

])
Я ожидаю получить результат
tensor([3, 2, 5])

Я сделал это с помощью numpy (перечислено ниже, предполагая, что «вход» — это numpy-двоичная матрица), и это, как правило, очень эффективно, но я не могу найти способ использовать тензоры, которые по крайней мере, столь же эффективен. Я пытался следовать аналогичной логике, используя операции с факелом, но производительность всегда хуже.
Спасибо!
# Pad the matrix with ones
padded_matrix = np.pad(input, ((0, 0), (1, 1)), constant_values=1)

# Compute differences
diffs = np.diff(padded_matrix, axis=1)

# Identify start and end of zero runs
start_indices = np.where(diffs == -1)
end_indices = np.where(diffs == 1)

Compute lengths of zero runs
run_lengths = end_indices[1] - start_indices[1]

# Create a result array initialized with zeros
max_zeros = np.zeros(binaryGrid.shape[0], dtype=int)

# Use np.maximum.at to find the maximum run length for each row
np.maximum.at(max_zeros, start_indices[0], run_lengths)```


Подробнее здесь: https://stackoverflow.com/questions/792 ... n-each-row
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»