【问题标题】:read matrix data using readdlm in julia在 Julia 中使用 readdlm 读取矩阵数据
【发布时间】:2020-11-28 08:24:18
【问题描述】:

我正在尝试使用 julia 构建 cora citation network 的图形。 数据结构如下,

1 9 1
1 436 1
1 545 1
4 198 1
4 464 1
4 602 1
...

边是从第一行的节点 id 到第二行的节点 id 构造的。第三行是边的权重。在这个数据集中,所有边的权重都是 1。cora 有 2708 个节点,5429 条边。

我写了如下的 julia 代码,

function MatrixMarketRead(filename)
     A = readdlm(filename)
     A = A[4:end,1:3]
    return sparse( round(Int64,A[:,1]), round(Int64,A[:,2]), convert(Array{Float64},A[:,3]))
end

dir  = "dataset/"
ln = "cora.mtx"
A = MatrixMarketRead(string(dir,strip(ln)));

print(size(A))

结果是

(2708,2706)

这应该是 (2708, 2708) 的形状,但结果是这样的。我不确定为什么会这样。我该如何解决这个问题?

【问题讨论】:

  • 也许可以考虑 LightGraphs.jl(可能与 MetaGraphs.jl 一起)。
  • 但是代码应该是对的。您是否尝试过类似maximum(A[:, 2]) 的方法来查看所有值是否真的存在?如果不是,你sparse 不能神奇地推断出矩阵是二次的。但是你可以使用五参数构造函数。
  • @phipsgabler 感谢您的建议。从输出来看,这个数据集很可能在其行或列中没有所有节点 ID。但是五个参数构造函数是什么意思?
  • sparse(A[:, 1], A[:, 2], A[:, 3], 2708, 2708).
  • 哦,很确定,是的。那是真的古老的。

标签: julia


【解决方案1】:

正如 phipsgabler 在 cmets 中指出的那样,更新到更新版本的 Julia 将是解决此问题的第一步。有关开始使用最新版本的详细信息,请参阅此处https://julialang.org/downloads/

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多