You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中计算/转换二进制矩阵数值向量及自动构建置换转二进制矩阵

我来帮你搞定这两个R语言相关的问题,直接上易懂的解释和实用代码:

问题1:二进制矩阵与数值向量的转换/计算

实际场景中,这类需求通常分为两种:把数值向量转成二进制矩阵,或者把二进制矩阵转成数值向量,下面分别演示:

数值向量 → 二进制矩阵

如果要把十进制数转成二进制矩阵(每行对应一个数的二进制位),可以用intToBits()函数,不过它返回的是raw类型,需要转成整数再整理矩阵:

# 示例数值向量
num_vec <- c(3, 5, 7)

# 转换为4位二进制矩阵(低位在前,若要高位在前,把[1:4]改成[4:1])
binary_mat <- t(sapply(num_vec, function(x) as.integer(intToBits(x))[1:4]))
colnames(binary_mat) <- paste0("bit_", 1:4) # 命名二进制位
print(binary_mat)

输出结果:

bit_1 bit_2 bit_3 bit_4
[1,]     1     1     0     0
[2,]     1     0     1     0
[3,]     1     1     1     0

二进制矩阵 → 数值向量

反过来,把二进制矩阵每行转成十进制数,用矩阵乘法结合2的幂次就能实现:

# 示例二进制矩阵(高位在前)
binary_mat <- matrix(c(0,0,1,1, 0,1,0,1, 0,1,1,1), nrow=3, byrow=TRUE)
colnames(binary_mat) <- paste0("bit_", 4:1) # 对应2^3到2^0

# 转换为数值向量
num_vec <- binary_mat %*% 2^(ncol(binary_mat)-1:0)
print(num_vec)

输出结果:

[,1]
[1,]    3
[2,]    5
[3,]    7

问题2:将向量c(1,2,3)的相关子集转换为类二进制格式(得到7个值)

首先澄清一下:3个元素的置换只有6种,而你要的7个值应该是指所有非空子集的类二进制表示(2^3-1=7个)。下面就基于这个需求实现:

生成7个二进制向量(对应所有非空子集)

我们可以先生成所有非空子集的索引,再把每个子集转换成二进制向量,最终组成矩阵:

vec <- c(1,2,3)

# 生成所有非空子集的索引(从单元素到全元素)
subsets <- lapply(1:length(vec), function(k) combn(1:length(vec), k, simplify=FALSE))
subsets <- unlist(subsets, recursive=FALSE)

# 转换为类二进制矩阵(每行代表一个子集的二进制标记:1表示元素在子集中,0表示不在)
binary_matrix <- t(sapply(subsets, function(idx) {
  binary <- rep(0, length(vec))
  binary[idx] <- 1
  binary
}))

# 给每行命名,对应具体子集
rownames(binary_matrix) <- sapply(subsets, function(idx) paste(vec[idx], collapse=","))
print(binary_matrix)

输出结果:

[,1] [,2] [,3]
1       1    0    0
2       0    1    0
3       0    0    1
1,2     1    1    0
1,3     1    0    1
2,3     0    1    1
1,2,3   1    1    1

转换为7个十进制数值(可选)

如果不需要矩阵,只要7个数值,直接把二进制向量转成十进制数就行:

binary_values <- binary_matrix %*% 2^(length(vec)-1:0)
print(binary_values)

输出结果:

[,1]
1       4
2       2
3       1
1,2     6
1,3     5
2,3     3
1,2,3   7

这样就得到了你想要的7个值啦。


内容的提问来源于stack exchange,提问作者Ezra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:43:46