sample1d
- 官方文档:
- 简介:
对 1D 表数据进行重采样
语法
gmt sample1d
[ table ]
[ -A[f|p|m|r|R][+d][+l] ]
[ -C[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),…][+h[hinge]][+idz][+u|Uunit][+sfname] ]
[ -E ]
[ -Fa|c|e|l|n|sp[+d1|2] ]
[ -Ncol ]
[ -T[min/max/]inc[+a][+i|n][+u] | [-Tfile|list]]
[ -V[level] ]
[ -Wcol ]
[ -bbinary ]
[ -dnodata[+ccol] ]
[ -eregexp ]
[ -fflags ]
[ -ggaps ]
[ -hheaders ]
[ -iflags ]
[ -jflags ]
[ -oflags ]
[ -qflags ]
[ -sflags ]
[ -wflags ]
[ -:[i|o] ]
[ --PAR=value ]
描述
sample1d 从文件(或标准输入)读取一个多列的 ASCII 格式(或二进制)数据,
对时间序列或指定测线点位进行重采样。其中独立变量
(即单调递增或递减的变量,以下称之为 time )
默认位于首列,用户可指定其他列作为独立变量。可以使用等距或其他指定采样。
所有列都将基于新的采样间隔重新采样。除平滑样条 (smoothing spline)方法外,
还可选择多种插值方法。其中,平滑样条通过在拟合误差和曲率之间进行权衡
(即不完全精确拟合数据点以换取更平滑的曲线)来实现平滑效果。
本模块不支持输入数据范围外做外推插值。通过使用 -C 指定 CPT,
本模块将基于输入数据最后一列做颜色插值,将 r,g,b,a 添加到输出。
必选选项
- table
一个或多个ASCII或二进制表数据。若不提供表数据,则会从标准输入中读取。
可选选项
- -A
- -A[f|p|m|r|R][+l]
关于沿测线进行采样(如果设置了
-T…unit )的一些选项,在-A后追加:f - 沿测线采样,保留原始点位,按需会适当插值线段中点(默认)。
m - 类似 f ,但测线变为阶梯状,先沿经度采样,再沿纬度采样。
p - 类似 f ,但测线变为阶梯状,先沿纬度采样,再沿经度采样。
r - 等距采样,此时输入的点位(尤其是端点)可能不会严格包括在输出结果中。
R - 类似 r ,但会适当调整采样点间距使输入点位都在输出结果中。
还支持以下选项:
+d - 删除重复输入记录(即 time 没变化)。
+l - 使地理距离的测量沿着恒向线(rhumb lines 或 loxodromes , 即沿着该方向行进时行进方向始终与经线保持相同夹角)而不是默认的大圆弧。 loxodromes的计算模式是在球面上,故 +l 不可与 -je 同时使用。
- -C
- -C[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),…][+h[hinge]][+idz][+u|Uunit][+sfname]
基于 z 值确定颜色分量。通过指定主 CPT 名称,CPT 文件或用逗号分割的多个颜色, 以创建一个 CPT。如果不指定参数,则在现代模式下使用当前 CPT(如果可用)。 支持以下多种输入:
主 CPT 名称,例如 earth (详见 内置CPT ), 可使用 CPT 名称 master 或包括相对路径的 section/master 来指定(内置 CPT 不可添加 .cpt 扩展名)。
自定义 CPT 文件 cpt ,例如 my_colors.cpt 。
自动从多个颜色 color\(_1\),color\(_2\)[,color\(_3\),…] 中创建线性连续的 CPT,其中 z 值从 0 开始, 每添加一种颜色 z 值加 1。在这种情况下, color\(_i\) 可以是 r/g/b (e.g. 255/100/75), h-s-v (e.g. 180-0.8-1), c/m/y/k (e.g. 80/50/40/30),HTML十六进制 (e.g. #aabbcc) 或 颜色名称。逗号之间不能有空格。
支持以下选项:
+h - 对于有软铰链 (soft hinge) 的主 CPT,可指定 hinge 值启用铰链, 而对于有硬铰链 (harde hinge) 的 CPT,可以修改铰链位置 hinge ,但不能禁用。
+i - 指定 dz 使网格 z 值范围分层,默认使用精确范围。
+s - 将创建的 CPT 保存到文件 fname。当 CPT 是自动创建时这很有用, 但必须用于
-C的末尾。+u - 对于任何其他主 CPT,可以通过指定其原始单位 unit 将其 z 值单位转换为米。
+U - 与 +u 类似,但是将 z 值单位从米转换为指定单位 unit 。
注: 我们将在原始输出后新增四列,分别为 red、green 和 blue 的颜色分量 (均在 0-255 范围内)以及透明度(0-100%,0 表示不透明)。如果颜色表为灰度表, 则输出灰度(0-255)而非三原色。
- -E
- -E
如果输入数据中每行记录最后包含有文本列,输出的插值结果将尝试保留 time 精确匹配的记录对应的文本列,其它 time 不匹配的则没有文本。默认忽略文本列。
- -F
- -Fa|c|e|l|n|sp[+d1|2]
选择 1-D 插值方式:
a - Akima 样条(默认)
e - 阶梯曲线
c - 自然三次样条 (Natural cubic spline)
l - 线性插值
n - 不插值,取最近的数据点作为插值后的值
s - 平滑三次样条,指定拟合因子 p 以权衡样条拟合和曲率
用户也可以更改 GMT 默认的插值方式,见 GMT_INTERPOLANT 。 可以加上 +d1 或 +d2 来计算样条的一阶导或二阶导。 注: 如果使用 e 或 n 的插值方法来计算导数,则结果恒为 0。
- -N
- -Ncol
选择独立变量 time 的列索引 col ,默认为 0(即首列)。
- -T
- -T[min/max/]inc[+a][+i|n][+u] | [
-Tfile|list] 定义要等距采样的 time 范围(从 min 到 max )和步长 inc (默认使用输入的 time 值)。用法
-Tlist 表示指定一系列 time 值, 例如-T13,15,16,22.5 。具体详见 生成一维数组 。 若不使用-A,默认为-Af 。注: 对于空间 (x, y) 或 (lon, lat) 序列的重新采样, 用户必须使用有效的距离单位给出步长,例如
-T20k 。 关于单位见 距离单位 ,笛卡尔坐标则用单位 c 做距离单位。 此时前两列必须为空间坐标,GMT 将基于前两列空间坐标以及指定的步长沿大圆路径插值。
- -V
- -V[level]
设置 verbose 等级 [w]。 (参数详细介绍)
- -W
- -Wcol
指定列索引值为 col 的列作为平滑三次样条的权重, 要求使用 -Fs 。
- -bi
- -bi[ncols][type][w][+l|b]
控制二进制文件的输入格式。 (参数详细介绍)
- -bo
- -bo[ncols][type][w][+l|b]
控制二进制文件的输出格式。 (参数详细介绍)
- -d
- -d[i|o]nodata
将某些特定值当作 NaN。 (参数详细介绍)
- -e
- -e[~]“pattern” | -e[~]/regexp/[i]
筛选或剔除匹配指定模式的数据记录。 (参数详细介绍)
- -f
- -f[i|o]colinfo
显式指定当前输入或输出数据中每一列的数据类型。 (参数详细介绍)
- -g
- -g[a]x|y|d|X|Y|D|[col]zgap[+n|p]
确定数据或线段的间断。 (参数详细介绍)
- -h
- -h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle]
在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)
- -i
- -icols[+l][+sscale][+ooffset][,…][,t[word]]
对输入的数据进行列选择以及简单的代数运算。 (参数详细介绍)
- -j
- -je|f|g
设置球面距离的计算方式。 (参数详细介绍)
- -o
- -ocols[,…][,t[word]]
对输出的数据进行列选择以及简单的代数运算。 (参数详细介绍)
- -q
- -q[i|o][~]rows[+ccol][+a|f|s]
对输入或输出的行进行筛选,该选项在一定程度上可以代替 gawk 的某些功能。 (参数详细介绍)
- -s
- -s[cols][+a|+r]
设置 NaN 记录的处理方式。 (参数详细介绍)
- -w
- -wy|a|w|d|h|m|s|cperiod[/phase][+ccol]
将输入坐标转换为循环坐标。 (参数详细介绍)
- -^ 或 -
显示简短的帮助信息,包括模块简介和基本语法信息(Windows下只能使用 -)
- -+ 或 +
显示帮助信息,包括模块简介、基本语法以及模块特有选项的说明
- -? 或无参数
显示完整的帮助信息,包括模块简介、基本语法以及所有选项的说明
- --PAR=value
临时修改GMT参数的值,可重复多次使用。参数列表见 配置参数
距离单位
ASCII 格式精度
ASCII 格式输出数据通过 gmt.conf 配置文件控制。控制经纬度格式的参数为 FORMAT_GEO_OUT ;控制绝对时间的的参数包括 FORMAT_DATE_OUT 和 FORMAT_CLOCK_OUT ;普通浮点数通过参数 FORMAT_FLOAT_OUT 控制。上述格式控制可能会导致精度损失,这会在下游计算中导致一些问题。 如果用户需要保证数据精度,则应考虑将数据写为二进制文件,或者使用 FORMAT_FLOAT_OUT 指定更多的有效数字。
生成一维数组
下面将展示如何使用 math 生成一维数组(其中大部分操作也可通过 linux 中的 seq 命令方便地实现)
不使用任何子选项
以 0.1 为步长,生成 3.1 到 4.2 等等间隔序列
gmt math -o0 -T3.1/4.2/0.1 T =
3.1
3.2
...
4.2
+a 选项
该选项不对生成的数列进行运算操作,而是将该数列以列的形式追加到输出表数据,类似 linux 中的 paste 命令。
+b 选项
以 3 和 20 分别为起点和终点,创建一个 2 的整数幂的列表,将生成 的整数幂以 1 为步长取值 -T3/20/1+b
gmt math -o0 -T3/20/1+b T =
4
8
16
+l 选项
以 7 和 135 分别为起点和终点,先创建一个 10 的整数幂的列表,当 inc 为 1 时,输出该列表;当 inc 为 2 时,同时输出该列表中每个元素的 1,2,5 倍值(不包括超出原始数据范围的部分); 当 inc 为 3 时,同时输出 该列表中每个元素的 1,2,…,9 倍值(同样不包括超出原始数据范围的部分)。 -T7/135/2+l 将会生成如下数列
gmt math -o0 -T7/135/2+l T =
10
20
50
100
inc 为负整数时,将实现如下效果
gmt math -o0 -T1e-4/1e4/-2+l T =
0.0001
0.01
1
100
10000
+i 选项
该选项将以 1 作为默认步长,第三个数字做为每步长中的数字个数 length。假设需要在 1 分钟内每 24 秒生成一帧
gmt math -o0 -T0/60/24+i T =
0
0.0416666666667
0.0833333333333
0.125
0.166666666667
...
60
+n 选项
生成固定长度的数列。以 3.44 和 7.82 为 起点和终点,生成长度为 5 的等间隔序列
gmt math -o0 -T3.44/7.82/5+n T =
3.44
4.535
5.63
6.725
7.82
-T 后直接加文件或逗号分隔的数列
-T 后可以直接加文件,文件中即为要生成的列表;另外,可以直接使用逗号分隔, 将列表附加到 -T 选项后,如下为 Fibonacci 数列前 6 项
gmt math -o0 -T0,1,1,2,3,5 T =
0
1
1
2
3
5
注 : 如果数列只包含一个值,必须在其后加逗号以表明仍是一个数列
+u 选项
如果文件或者逗号分隔的数列中有重复数字或未排序,可以使用 +u 选项去重并排序。
+t 选项
生成绝对时间序列。在 inc 后分别添加 y ,o ,d ,h , m 和 s 表示时间步长的单位为年,月,日,时,分,秒。在其后附加 +t 选项, 可以进一步强调生成时间序列,也可以不加
gmt math -o0 -T2020-03-01T/2020-03-07T/1d T =
2020-03-01T00:00:00
2020-03-02T00:00:00
2020-03-03T00:00:00
2020-03-04T00:00:00
2020-03-05T00:00:00
2020-03-06T00:00:00
2020-03-07T00:00:00
生成距离序列
如果输入文件中包含两列以上的数据,可以使用前两列计算距离,并生成等距序列。 在 inc 后分别添加 d,m,s,e,f,M,n 和 u 表示距离步长的单位为度,分,秒,米,英尺,公里,英里,海里,英尺。如果 为笛卡尔坐标,使用 c 作为距离步长单位。
+e 选项
如果只给定 inc 而从数据中获取最大值和最小值,则 (max - min)/inc 可能 不是整数,GMT 讲会自动对 inc 进行一定的调整。如果不想调整 inc ,则可以 使用 +e 选项,GMT 会固定最小值,适当调整最大值。
注意
平滑样条 \(s(t)\) 通过设置拟合因子 \(p\) 在最小化拟合误差 (完全拟合所有点,对应 \(p\) 很大)和最小化曲率( \(p\) 接近 0)之间进行权衡。 具体而言,我们想要最小化以下泛函
其中拟合误差定义为
而曲率定义为样条的二阶导数的在区间上的定积分,
可能需要反复试验来选择合适的 \(p\) 。
示例
注: 下面是该模块的一些有效语法示例。使用远程文件(文件名以 @ 开头)的示例可以剪切并粘贴到您的终端中进行测试。其他需要输入文件的命令只是常见的使用类型的虚拟示例,但不能按编写的原样运行。
使用 Akima 样条以 1 km 为间隔重采样文件 profiles.tdgmb,文件格式为: time, distance, gravity, magnetics, bathymetry
gmt sample1d profiles.tdgmb -N1 -Fa -T1 > profiles_equi_d.tdgmb
使用三次样条插值,在 grav_pos.dg 指定的点位上采样文件 depths.txt
gmt sample1d depths.txt -Tgrav_pos.dg -Fc > new_depths.txt
将 0 到 6 之间的数据以 0.01 为间隔用三次样条重采样,不输出数据而是输出一阶偏导(即斜率):
gmt sample1d points.txt -T0/6/0.01 -Fc+d1 > slopes.txt
测线数据中包含经度、纬度和深度,将其采样为每 2 海里一个点:
gmt sample1d track.txt -T2n -AR > new_track.txt
同上,但确保包含了原始数据点:
gmt sample1d track.txt -T2n -Af > new_track.txt
以 5 km 为间隔,沿着恒向线采样
gmt sample1d track.txt -T5k -AR+l > new_track.txt
在文件 temperatures.txt 中采样 2000 年到 2018 年每月温度:
gmt sample1d temperatures.txt -T2000T/2018T/1o > monthly_temp.txt
在地形剖面上给定拟合因子使用平滑样条插值:
gmt sample1d @topo_crossection.txt -T300/500/0.1 -Fs0.001 > smooth.txt