我需要在矩阵市场格式的任何稀疏矩阵中插入零元素(但已经没有标题)。
第一列是 ROW 的编号,第二列是 COLUMN 的编号,第三列是元素的 VALUE。
我正在使用 2 x 3 矩阵进行测试。但我需要能够对任何维度矩阵 mx n 执行此操作。
每个矩阵的行、列和非零元素的数量已经在单独的变量中。
到目前为止,我一直使用 bash sed 和 awk 来处理这些矩阵。
输入文件:
1 1 1.0000
1 2 2.0000
2 1 4.0000
2 2 5.0000
2 3 6.0000
ROWS 和 COLUMNS 是整数 %d,VALUES 是浮点数 %.4f
这里只有一个元素为零(第 1 行第 3 列),代表它的行被省略。
那么,我怎样才能插入这一行???
输出文件:
1 1 1.0000
1 2 2.0000
1 3 0.0000
2 1 4.0000
2 2 5.0000
2 3 6.0000
一个空的 2 x 3 矩阵如下所示:
1 1 0.0000
1 2 0.0000
1 3 0.0000
2 1 0.0000
2 2 0.0000
2 3 0.0000
另一个例子,一个具有更多零元素的 3 x 4 矩阵。
输入文件:
1 2 9.7856
1 4 4.2311
2 1 3.4578
2 2 45.1231
2 3 -12.0124
3 4 0.1245
输出文件:
1 1 0.0000
1 2 9.7856
1 3 0.0000
1 4 4.2311
2 1 3.4578
2 2 45.1231
2 3 -12.0124
2 4 0.0000
3 1 0.0000
3 2 0.0000
3 3 0.0000
3 4 0.1245
我希望你能帮助我。我已经花了超过 3 天的时间尝试解决方案。
我得到的最好的是:
for((i=1;i<3;i++))
do
for((j=1;j<4;j++))
do
awk -v I=${i} -v J=${j} 'BEGIN{FS=" "}
{if($1==I && $2==J)
printf("%d %d %.4f\n",I,J,$3)
else
printf("%d %d %d\n",I,J,0)
}' ./etc/A.2
done
done
但它效率不高,并且打印出许多不需要的行:
1 1 1.0000
1 1 0
1 1 0
1 1 0
1 1 0
1 2 0
1 2 2.0000
1 2 0
1 2 0
1 2 0
1 3 0
1 3 0
1 3 0
1 3 0
1 3 0
2 1 0
2 1 0
2 1 4.0000
2 1 0
2 1 0
2 2 0
2 2 0
2 2 0
2 2 5.0000
2 2 0
2 3 0
2 3 0
2 3 0
2 3 0
2 3 6.0000
请!帮我!谢谢你们!