<p>当我们可以通过在Scala中读取文件并处理其输入来直接创建所需的结构时,就不需要尝试用脚本生成Scala源代码。你知道吗</p>
<p>考虑到以下情况”弧.txt“文件:</p>
<pre><code>LIST OF ARCS
0 1 0.440004
0 2 0.244452
0 3 0.433273
1 3 0.161616
</code></pre>
<p>我们读取数据并把它列成一个列表</p>
<pre><code>import scala.io.Source
val arcData = Source.fromFile("/home/maasg/playground/data/arcs.txt").getLines.toList
</code></pre>
<p>删除标题,解析文本并将格式良好的数据点保留为<code>Map</code>的<code>(x,y)-> weight</code>。请注意,这已经是一种稀疏矩阵表示,其中缺少的值可以假定为0。你知道吗</p>
<pre><code>val sparse = arcData.drop(1)
.flatMap{line => line.split("[ ]+") match {
case Array(from, to, weight.toDouble) => Some(((from, to), weight))
case _ => None
}
}
.toMap
</code></pre>
<p>为了获得稠密矩阵,我们首先使用稀疏矩阵的关键点计算顶点:</p>
<pre><code>val vertices = sparse.keys.flatMap{case (v1, v2) => Seq(v1,v2)}.toList
</code></pre>
<p>然后,我们创建一个密集的邻接矩阵表示:</p>
<pre><code>val matrix = vertices.map(xs => vertices.map(ys => sparse.get((xs,ys)).getOrElse(0.0)))
// matrix: List[List[Double]] = List(List(0.0, 0.0, 0.0, 0.0, 0.0),
// List(0.25, 0.0, 0.0, 0.0, 0.161616),
// List(0.0, 0.440004, 0.0, 0.244452, 0.433273),
// List(0.0, 0.0, 0.0, 0.0, 0.0),
// List(0.0, 0.0, 0.0, 0.0, 0.0)
//)
</code></pre>