Como faço para interpolar um arquivo de texto de coordenadas 3D (X, Y, Z) em uma grade regular?

1

Eu tenho uma superfície 3D em um arquivo de texto que preciso plotar em uma grade X / Y regular. No entanto, os valores para X e Y não são espaçados regularmente e não estão necessariamente em ordem crescente. Preciso espaçar regularmente as coordenadas X e Y e interpolar o valor na coluna Z. A coluna Z não precisa ser subamostrada.

Hear é um exemplo do arquivo. As colunas são X, Y e Value (ou Z):

50459.83        170405.62       0.01
50439.13        170384.92       0.03
50459.83        170384.92       0.04
50480.53        170384.92       0.01
50459.83        170364.22       0.13
50480.53        170364.22       0.14
50397.72        170343.51       0.27
50418.42        170343.51       0.33
50480.53        170343.51       0.32
50501.23        170343.51       0.36
50563.34        170343.51       0.29

Eu gostaria de uma saída como:

50460        170400       0.01
50440        170380       0.03
50460        170380       0.04
50480        170380       0.01
50460        170360       0.13

Ou seja. ter X e Y amostrados em uma grade de 20x20 e ter a coluna Z interpolada para esses pontos de grade (o que eu não fiz na saída de exemplo).

O arquivo é muito grande, dezenas de milhões de linhas.

Obrigado.

    
por jaffa1201 03.05.2016 / 10:52

1 resposta

1

AFAICT da sua entrada e saída de amostra, você deve arredondar o primeiro campo para o 10 mais próximo, arredondar o segundo campo para o 10 mais próximo e deixar o terceiro campo sozinho.

awk '{printf "%5.0f\t%6.0f\t%.2f\n", int($1/10+0.5)*10, int($2/10)*10, $3}' file

Saída:

50460   170400  0.01
50440   170380  0.03
50460   170380  0.04
50480   170380  0.01
50460   170360  0.13
50480   170360  0.14
50400   170340  0.27
50420   170340  0.33
50480   170340  0.32
50500   170340  0.36
50560   170340  0.29
    
por 04.05.2016 / 01:38

Tags