✍️ 周茂 , 陈箫翰  •  📅 2026-01-21

生成一维数组

histogram, makecpt, math, movie, regress, sample1d, talwani2d, batch, earthtide, filter1d, grdinterpolate 这些模块,它们的 -T 选项用法相同,都是用来创建一维数组。

下面将以 math 为例,讲解 -Tmin/max/inc 的用法(其中大部分操作也可通过linux 中的 seq 命令方便地实现)。

不使用任何子选项

生成一个从 minmax,步长为 inc 的等间隔数组,例如以 0.1 为步长,生成 3.1 到 4.2 的等间隔数组:

gmt math -o0 -T3.1/4.2/0.1 T =
3.1
3.2
3.3
3.4
3.5
3.6
3.7
...

+b 选项

首先对 minmax\(\log_2\) ,取整到最近的整数作为新的起点和终点。以 inc 为步长,生成从新的起点到终点的整数序列。 再以这个整数序列中的每一个数为指数(假设为 n ),计算 \(2^n\) ,生成最终的一维数组。

例如 -T3/20/1+b ,首先计算 \(\log_2 3 \approx 1.58\) 取整为 2 ,以及 \(\log_2 20 \approx 4.32\) 取整为 4 。 以 1 为步长生成整数序列 2 3 4 。再计算 \(2^2 = 4\) , \(2^3 = 8\) , \(2^4 = 16\) ,最终生成一维数组:

gmt math -o0 -T3/20/1+b T =
4
8
16

+l 选项

minmax 为最终生成的一维数组的数据范围。 inc 如果为正数,则只能有 1, 2, 3 三种取值:

  • 1 :生成 10 的幂次(1, 10, 100...)。

  • 2 :生成 1-2-5 序列(1, 2, 5, 10, 20, 50, 100...)。

  • 3 :生成 1-9 全序列(1, 2, 3...9, 10, 20...)。

然后再取出 minmax 之间的部分作为最终生成的一维数组。

例如, -T7/135/2+l 将生成:

gmt math -o0 -T7/135/2+l T =
10
20
50
100

首先生成完整的 1-2-5 序列: ... 1, 2, 5, 10, 20, 50, 100, 200, 500 ...。 ... 1, 2, 5(小于7)和 200, 500 ...(大于135)会被排除,而 10 20 50 100 为最终生成的一维数组。

同理, -T7/135/1+l 将生成:

gmt math -o0 -T7/135/1+l T =
10
100

-T7/135/3+l 将生成:

gmt math -o0 -T7/135/3+l T =
7
8
9
10
20
30
40
50
60
70
80
90
100

如果 inc 为负数,则可以取任意负数值。首先以 0 为中心,生成以 inc 为步长的序列:

  • -1 : ... -4, -3, -2, -1, 0, 1, 2, 3, 4 ...

  • -2 : ... -8, -6, -4, -2, 0, 2, 4, 6, 8 ...

  • 以此类推

再以序列中的每一个元素为指数(假设为 n ),计算 \(10^n\) ,取出 minmax 之间的部分作为最终生成的一维数组。

$ gmt math -o0 -T1e-4/1e4/-2+l T =
0.0001
0.01
1
100
10000

$ gmt math -o0 -T1e-16/1e16/-3+l T =
1e-15
1e-12
1e-09
1e-06
0.001
1
1000
1000000
1000000000
1e+12
1e+15

+i 选项

inc 的倒数为步长生成从 minmax 的一维数组。 例如在 movie 中为持续 1 分钟的每秒 24 帧动画设置时间:

gmt math -o0 -T0/60/24+i T =
0
0.0416666666667
0.0833333333333
0.125
0.166666666667
...
60

+n 选项

inc 表示等间隔一维数组元素的个数。例如以 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 后可以直接加文件名,文件内容即为要生成的一维数组。也可以直接给出逗号分隔的数列,例如前 6 个斐波那契数:

gmt math -o0 -T0,1,1,2,3,5 T =
0
1
1
2
3
5

:(1) 如果需要通过数据集文件传递列表节点但希望被理解为列表(即不进行插值),则必须设置文件头包含字符串 "LIST"。 (2) 如果文件或者逗号分隔的数列中有重复数字或未排序,可以使用 +u 选项去重并排序。 (3) 如果数列只包含一个值,必须在其后加逗号以表明仍是一个数列,以免被误判为步长。

时间序列

如果模块支持绝对时间序列,在 inc 后分别添加 yodhms 表示时间步长的单位为年,月,日,时,分,秒。在其后附加 +t 选项,可以进一步强调生成时间序列,也可以不加。

例如生成表示 2020 年 3 月的前 7 天的时间序列:

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

+a 选项

少数模块允许使用 +a,该选项不对生成的数列进行运算操作,而是将该数列以列的形式追加到输出表数据。 类似 linux 中的 paste 命令。

生成距离序列

如果模块允许设置空间距离序列,可以使用输入数据的前两列计算距离,并生成等间距序列。

inc 后分别添加 dmsefMnu 表示距离步长的单位为度,分,秒,米,英尺,公里,英里,海里,测量英尺。参见 -j 选项 了解计算模式。 如果为笛卡尔坐标,必须使用特殊单位 c 作为距离步长单位。

+e 选项

如果只给定 inc 而从数据中获取最大值和最小值,则 (max - min)/inc 可能不是整数,GMT 会自动对 inc 进行一定的调整。 如果不想调整 inc ,则可以使用 +e 选项,GMT 会固定最小值,适当调整最大值。