Уменьшите тензор факела

#pytorch

Вопрос:

Для булева тензора формы (15,10) я хочу выполнить bitwise_or вдоль оси 0 так, чтобы результирующий тензор имел форму 10. torch.bitwise_or не поддерживает это.

Я знаю, что это можно сделать с numpy помощью np.bitwise_or.reduce(x,axis=0) . Я не нашел ничего подобного в torch. Как уменьшить тензор факела?

Ответ №1:

Привет, я понял проблему здесь, если вы посмотрите на строку документа для функции reduce, по сути, это просто цикл for, добавляющий себя с 0

 # ufunc docstring
# op.identiy is 0
r = op.identity # op = ufunc 
for i in range(len(A)):
  r = op(r, A[i])
return r
 

Итак, чтобы решить и устранить вашу проблему

 import numpy as np
import torch

bool_arr = np.random.randint(0, 2, (15, 10), dtype=np.bool) # create a bool arr
tensor_bool_arr = torch.tensor(bool_arr) # Create torch version
output_np = np.bitwise_or.reduce(bool_arr, axis=0) 
# array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True])

# Create a pytorch equivalent of bitwise reduce
r = torch.tensor(0)
for i in range(len(tensor_bool_arr)):
    r = torch.bitwise_or(r, tensor_bool_arr[i])

torch_output = r.type(torch.bool)
# tensor([True, True, True, True, True, True, True, True, True, True])
assert torch_output.shape[0] == np_output.shape[0]