2017-07-20 8 views
0

サイズm x nの行列を長さLL = m x n)の配列としてファイルに保存するプログラムがあります。 m = n = 2ためGnuplot:データファイルからマトリックスへの整形配列

例:ファイル(ファイル内の唯一のマトリックスの場合)次の番号が含まれています

2 x 2行列表す
1 
2 
3 
4 

1 2 
3 4 

ファイルは、多くが含まれて行列。 ::start_position::end_positionコマンドを使用してこのファイルの特定の行列をプロットし、長さがLの配列をm x nの行列に変換して、matrix nonuniformというコマンドを使用できるようにしたいと考えています。

どうすればいいですか?

答えて

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 

はgnuplotのでは確かに

10 20 30 
40 50 60 

もたらし、あなたがコマンドにこれをラップすることができます(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] ... 
関連する問題