我有一个弧形列表(最多200行),如下图所示 . 三元组是(x,y,z),这意味着在重量z处从x到y的边缘 . 我确切地知道文件中有多少行(边数),节点数也是如此 . 我想使用Scala中的List在Scala中创建一个带有这些边的邻接矩阵输入 . 语法就像是例如 List(List(0,0,0,0), List(0,0,0,0)))
我希望有一个脚本可以接受下面显示的窗体的.txt文件并输出adj的Scala语法 . 从这些边缘列出 .
LIST OF ARCS 0 1 0.440004 0 2 0.244452 0 3 0.433273
对于上面的输入,输出应该是
ListBuffer( ListBuffer(0, 0.440004, 0.244452, 0.433273), ListBuffer(0.440004, 0, 0, 0), ListBuffer(0.244452, 0, 0, 0), ListBuffer(0.433273, 0, 0, 0))
这就是我的想法和想法 . val lines = Source.fromFile("f1.txt") . getLines.toList.map(i => println(i))我可以预填充ListBuffer.fill(10)(10)然后如果我可以弄清楚如何使每一行成为一个类型Ints的三倍,然后我可以更新我预先填充的ListBuffer结构 .
3 回答
在awk中:
运行:
当我们可以通过读取文件并在Scala中处理其输入来直接创建所需的结构时,无需尝试使用脚本生成Scala源代码 .
给出以下“arcs.txt”文件:
我们读取数据并将其放入列表中
删除 Headers ,解析文本并保留格式良好的数据点作为
Map
的Map
. 请注意,这已经是一个稀疏矩阵表示,其中缺少的值可以假设为0 .为了获得密集矩阵,我们首先使用稀疏矩阵的键计算顶点:
然后,我们创建一个密集的邻接矩阵表示: