R语言通过暴力法生成所有K×N维度0-1矩阵的实现方法
任意K×N维度0-1矩阵暴力枚举实现
核心逻辑
K行N列的0-1矩阵总共有2^(K*N)种可能,每个位置的元素独立取0或1,暴力枚举的本质就是遍历所有元素的取值组合,再按维度拼接成矩阵。
R语言实现(适配你示例中的语法)
generate_all_binary_matrices <- function(K, N) { total_count <- 2^(K * N) result_list <- vector("list", total_count) for (idx in 0:(total_count - 1)) { # 提取整数对应的二进制位,取前K*N位即可 bit_vector <- as.integer(intToBits(idx))[1:(K*N)] # 按行填充为K行N列矩阵 result_list[[idx + 1]] <- matrix(bit_vector, nrow = K, ncol = N, byrow = TRUE) } return(result_list) }
测试调用
# 生成2×2的所有0-1矩阵 all_mats <- generate_all_binary_matrices(K = 2, N = 2) # 遍历打印所有矩阵 for (mat in all_mats) { print(mat) cat("\n") }
Python实现
import itertools import numpy as np def generate_all_binary_matrices(K: int, N: int): all_matrices = [] # 生成所有长度为K*N的0-1取值组合 for bit_comb in itertools.product([0, 1], repeat=K*N): # 调整维度为K行N列 mat = np.array(bit_comb).reshape(K, N) all_matrices.append(mat) return all_matrices
测试调用
all_mats = generate_all_binary_matrices(K=2, N=2) for mat in all_mats: print(mat) print("-"*10)
注意事项
暴力枚举的复杂度是指数级的,仅适合K、N较小的场景:当K*N>20时,总矩阵数会超过百万,继续增大会快速耗尽内存和算力,此时需要使用优化的采样或筛选方案。
内容的提问来源于stack exchange,提问作者Jonathan1234
相关产品推荐
相关产品推荐

