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

如何用一行代码从计数数组构建指定结构的0-1矩阵?

问题:生成指定0-1矩阵的简洁一行代码实现

给定一个长度为6、包含3个唯一值的数组(示例:c(1,1,1,2,3,3)),需构建如下6×3的0-1矩阵:

[1, 0 , 0]  
[1, 0 , 0]  
[1, 0 , 0]  
[0, 1 , 0]  
[0, 0, 1]  
[0, 0, 1]

已有基础实现方式:

V = c(1,1,1,2,3,3)
Z = matrix(0,6,3)
for (i in 1:6) {Z[i, V[i]] = 1}

请问是否存在更简洁的一行代码实现该操作?


回答

当然有,这里提供两种简洁的一行代码实现方式:

方法一:利用单位矩阵索引

V <- c(1,1,1,2,3,3)
Z <- diag(length(unique(V)))[V, ]

原理很直接:先创建维度等于数组唯一值数量的单位矩阵,再通过数组V的元素作为行索引提取对应行,就能得到目标0-1矩阵。

方法二:利用model.matrix函数

V <- c(1,1,1,2,3,3)
Z <- model.matrix(~ factor(V) - 1)

该方法将V转为因子后,生成无截距项的设计矩阵,结果完全符合要求,唯一区别是矩阵列名会带有因子标识(比如factor(V)1),如果不需要可后续用colnames(Z) <- NULL去除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:32:50