创建特定长度的所有二进制值向量

时间:2019-11-12 19:13:15

标签: python pytorch

如何有效地创建形状为(2**N, N)的矩阵,并将所有长度为N的二进制矢量作为行?我称向量二进制为iff,它的每个分量等于0或1。我希望矩阵具有dtype=torch.float

3 个答案:

答案 0 :(得分:1)

对于N的适度值,可以正常使用:

import numpy as np

def bin_array(N, dtype):
    return (np.arange(1<<N, dtype=dtype)[:, None] >> np.arange(N, dtype=dtype)[::-1]) & 0b1

不过,为了获得最大的效率,我建议生成打包在uint8值中的各个位,并设计用于对其进行运算的算法。这将取决于您要对数组执行什么操作。

答案 1 :(得分:1)

Seb的答案,但为pytorch进行了修改:

def gen_all_binary_vectors(length: int) -> torch.Tensor:
    return ((torch.arange(2**length).unsqueeze(1) >> torch.arange(length-1, -1, -1)) & 1).float()

答案 2 :(得分:0)

你可以做到

import random
import torch
res = [ [ random.randint(0, 1) for i in range(2**N) ] for j in range(N) ]
pt_tensor_from_list = torch.FloatTensor(res)