【问题标题】:How to get rid of every column that are filled with zero from a Pytorch tensor?如何从 Pytorch 张量中去掉每一列都填满零?
【发布时间】:2020-03-23 08:46:11
【问题描述】:

我有一个 pytorch 张量 A,如下所示:

A = 
tensor([[  4,   3,   3,  ...,   0,   0,   0],
        [ 13,   4,  13,  ...,   0,   0,   0],
        [707, 707,   4,  ...,   0,   0,   0],
        ...,
        [  7,   7,   7,  ...,   0,   0,   0],
        [  0,   0,   0,  ...,   0,   0,   0],
        [195, 195, 195,  ...,   0,   0,   0]], dtype=torch.int32)

我想:

  • 识别所有条目都等于 0 的所有列
  • 只删除所有条目都等于 0 的列

我可以想象这样做:

zero_list = []
for j in range(A.size()[1]):
    if torch.sum(A[:,j]) == 0:
         zero_list = zero_list.append(j)

识别元素只有 0 的列 但我不确定如何从原始张量中删除这些填充为 0 的列。

如何根据索引号从 pytorch 张量中删除零列?

谢谢,

【问题讨论】:

    标签: python pytorch tensor torchtext


    【解决方案1】:

    索引要保留的列而不是要删除的列更有意义。

    valid_cols = []
    for col_idx in range(A.size(1)):
        if not torch.all(A[:, col_idx] == 0):
            valid_cols.append(col_idx)
    A = A[:, valid_cols]
    

    或者更神秘一点

    valid_cols = [col_idx for col_idx, col in enumerate(torch.split(A, 1, dim=1)) if not torch.all(col == 0)]
    A = A[:, valid_cols]
    

    【讨论】:

      【解决方案2】:

      识别所有条目都等于0的所有列

      non_empty_mask = A.abs().sum(dim=0).bool()

      这对每列的绝对值求和,然后将结果转换为布尔值,即如果总和为零,则为 False,否则为 True

      仅删除所有条目都等于 0 的列

      A[:,non_empty_mask]

      这只是将掩码应用于原始张量,即它保留non_empty_maskTrue 的行。

      【讨论】:

        猜你喜欢
        • 2020-12-19
        • 2020-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 2018-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多