如何对PyTorch张量执行reduce操作实现沿指定轴的bitwise_or运算
PyTorch布尔张量按指定维度做bitwise_or reduce的实现方案
方案1:布尔张量场景极简实现
对于布尔类型张量来说,沿指定维度做bitwise_or等价于判断该维度下是否存在至少一个True,直接调用torch.any即可实现,运算效率最高:
import torch # 构造示例输入:shape为(15,10)的布尔张量 input_tensor = torch.randint(0, 2, size=(15, 10), dtype=torch.bool) # 沿axis=0维度做bitwise_or,输出shape为(10,) output = input_tensor.any(dim=0)
方案2:通用场景实现(兼容布尔/整数类型张量)
如果需要对齐numpy的np.bitwise_or.reduce的通用逻辑(同时支持整数、布尔类型张量的按位或规约),可以结合functools.reduce和张量拆维实现:
import torch import operator from functools import reduce # 支持任意输入类型:bool/uint8/int32等均可 input_tensor = torch.randint(0, 255, size=(15, 10), dtype=torch.uint8) # 沿axis=0维度做bitwise_or规约 output = reduce(operator.or_, input_tensor.unbind(dim=0))
说明:input_tensor.unbind(dim=0)会将输入张量沿第0维拆分为15个shape为(10,)的张量,reduce会逐次对所有拆分后的张量执行按位或操作,最终得到的结果和numpy的reduce接口输出完全一致。
内容的提问来源于stack exchange,提问作者bananagator
相关产品推荐
相关产品推荐

