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

# 生成一维数组

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

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

## 不使用任何子选项

生成一个从 min 到 max，步长为 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 选项

首先对 min 和 max 取 \(\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 选项

min 和 max 为最终生成的一维数组的数据范围。 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...）。

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

例如， -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\) ，取出 min 和 max 之间的部分作为最终生成的一维数组。

    $ 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 的倒数为步长生成从 min 到 max 的一维数组。 例如在 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 后分别添加 y ，o ，d ，h ， m 和 s 表示时间步长的单位为年，月，日，时，分，秒。在其后附加 +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 后分别添加 d，m，s，e，f，M，n 和 u 表示距离步长的单位为度，分，秒，米，英尺，公里，英里，海里，测量英尺。参见 -j 选项 了解计算模式。 如果为笛卡尔坐标，必须使用特殊单位 c 作为距离步长单位。

## +e 选项

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