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