Gnuplot:将数据从数据文件重塑为矩阵

时间:2017-07-20 20:59:56

标签: matrix gnuplot

我有一个程序,它将大小为m x n的矩阵保存为文件中长度为L(其中为L = m x n)的数组。

m = n = 2的示例:该文件包含以下数字(如果文件中只有一个矩阵):

1
2
3
4

表示2 x 2矩阵:

1 2
3 4

该文件包含许多矩阵。我希望能够使用::start_position::end_position命令绘制此文件的特定矩阵,并将长度为L的数组转换为m x n矩阵,以便我可以使用命令{{1} }。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为最好将处理委托给某些外部工具。例如,这个gawk脚本:

BEGIN{
    #mat_id = 2
    #m = 2
    #n = 3

    mat_size = m * n
    row_lb = ((mat_id-1) * mat_size) + 1
    row_ub = row_lb + mat_size - 1

    curr_row = 0
}

NR >= row_lb && NR <= row_ub{
    col_id = (NR - row_lb) % n
    c = (col_id == (n-1))?"\n":" "
    printf "%d%s", $1, c
}

接受三个变量:mat_id是文件中矩阵的从1开始的索引,m表示行数,n表示列数。例如,数据文件test.dat为:

1
2
3
4
5
6
10
20
30
40
50
60

致电

gawk -v mat_id=2 -v m=2 -v n=3 -f filter.awk test.dat
确实

产量

10 20 30
40 50 60

在Gnuplot中,您可以将其包装成一个命令(假设gawk脚本位于调用Gnuplot的同一目录中):

getMatrix(fName, matId, m, n) = \
    sprintf("<gawk -v mat_id=%d -v m=%d -v n=%d -f filter.awk %s", matId, m, n, fName)

plot getMatrix('test.dat', 2, 2, 3) ... [ rest of the plot command] ...