【发布时间】:2016-06-13 19:43:10
【问题描述】:
我想创建一个关联矩阵。
我有一个包含 3 列的文件,例如:
id x y
A 22 2
B 4 21
C 21 360
D 26 2
E 22 58
F 2 347
我想要一个类似的矩阵(没有列名和行名):
2 4 21 22 26 58 347 360
A 1 0 0 1 0 0 0 0
B 0 1 1 0 0 0 0 0
C 0 0 1 0 0 0 0 1
D 1 0 0 0 1 0 0 0
E 0 0 0 1 0 1 0 0
F 1 0 0 0 0 0 1 0
我已经开始了这样的代码:
haps = readdlm("File.txt",header=true)
hap1_2 = map(Int64,haps[1][:,2:end])
ID = (haps[1][:,1])
dic1 = Dict()
for (i in 1:21)
dic1[ID[i]] = hap1_2[i,:]
end
X=[zeros(21,22)]; #the original file has 21 rows and 22 columns
X1 = hcat(ID,X)
现在的问题是我不知道如何在上面的示例中的特定列中用 1 填充矩阵。
我也不确定我是否走对了。
有什么建议可以帮到我吗?
谢谢!
【问题讨论】:
-
您是否查看过 DataFrames 包中的
ModelFrame()和ModelMatrix()函数?它们很可能具有您需要的功能。还有用于创建稀疏矩阵的 sparse() 函数(这是您要创建的)。这可以在这里工作,但实现起来有点复杂。 -
关联矩阵中 x=2 和 y=2 的同一列是故意的吗?
-
保持单一特定类型(如 Int 或 Bool)的关联矩阵,而不是混入作为字符串的标签,对于类型推断和效率来说要好得多。