如何使用Numpy优雅生成符合指定稀疏模式的(2^D, D)形0-1二维ndarray
实现方案
核心思路
你要生成的矩阵本质是所有D位二进制数的逐位拆解结果,共2D种组合,刚好对应矩阵的2D行,每列对应二进制的一位。
实现代码
方案1:位运算+广播(兼容性好,逻辑直观)
import numpy as np def generate_binary_matrix(D): nums = np.arange(2 ** D)[:, np.newaxis] bit_masks = 2 ** np.arange(D)[np.newaxis, :] return (nums & bit_masks) >> np.arange(D)
测试示例:
# D=2测试 print(generate_binary_matrix(2)) # 输出: # [[0 0] # [1 0] # [0 1] # [1 1]]
方案2:内置函数实现(代码更简洁)
使用numpy内置的np.unpackbits直接拆分整数的二进制位:
def generate_binary_matrix(D): return np.unpackbits( np.arange(2 ** D, dtype=np.uint8)[:, None], axis=1, count=D, bitorder='little' )
注意:如果D超过8,把dtype改成np.uint16、np.uint32等对应位数的无符号整数类型即可。
说明
两种实现输出的所有01组合都是完整的,如果你不需要严格匹配示例的行序,也可以调整bitorder或者结果的行排序,只要所有组合存在就符合要求。
内容的提问来源于stack exchange,提问作者thclark
相关产品推荐
相关产品推荐

