#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]