Транспонировать большую таблицу

На самом деле, при просмотре исходного кода linux tcэто выглядит так же.

Два варианта изменения переменной 'buffer'.

В частности, HTB изменяет переменную «буфер» при использовании опций mtuи burst

.

Однако TBF меняет переменную 'buffer' при использовании опцииburst

но переменная 'mtu' при использовании опцииmtu

Но мне нужно более глубоко изучить, что это значит.

[1] /tc/q _tbf.c

static int tbf_parse_opt(struct qdisc_util *qu, int argc, char **argv,
             struct nlmsghdr *n, const char *dev)
{
...
        } else if (matches(*argv, "burst") == 0 ||
            strcmp(*argv, "buffer") == 0 ||
            strcmp(*argv, "maxburst") == 0) {
            const char *parm_name = *argv;

            NEXT_ARG();
            if (buffer) {
                fprintf(stderr, "tbf: duplicate \"buffer/burst/maxburst\" specification\n");
                return -1;
            }
            if (get_size_and_cell(&buffer, &Rcell_log, *argv) < 0) {
                explain1(parm_name, *argv);
                return -1;
            }
...
        } else if (strcmp(*argv, "mtu") == 0 ||
               strcmp(*argv, "minburst") == 0) {
            const char *parm_name = *argv;

            NEXT_ARG();
            if (mtu) {
                fprintf(stderr, "tbf: duplicate \"mtu/minburst\" specification\n");
                return -1;
            }
            if (get_size_and_cell(&mtu, &Pcell_log, *argv) < 0) {
                explain1(parm_name, *argv);
                return -1;
            }
...
    opt.buffer = tc_calc_xmittime(opt.rate.rate, buffer);

    if (opt.peakrate.rate) {
        opt.peakrate.mpu      = mpu;
        opt.peakrate.overhead = overhead;
        if (tc_calc_rtable(&opt.peakrate, ptab, Pcell_log, mtu, linklayer) < 0) {
            fprintf(stderr, "tbf: failed to calculate peak rate table.\n");
            return -1;
        }
        opt.mtu = tc_calc_xmittime(opt.peakrate.rate, mtu);
    }

...
}

[2] /tc/q _htb.c

static int htb_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n, const char *dev)
...
        } else if (matches(*argv, "burst") == 0 ||
               strcmp(*argv, "buffer") == 0 ||
               strcmp(*argv, "maxburst") == 0) {
            NEXT_ARG();
            if (get_size_and_cell(&buffer, &cell_log, *argv) < 0) {
                explain1("buffer");
                return -1;
            }
        } else if (matches(*argv, "cburst") == 0 ||
               strcmp(*argv, "cbuffer") == 0 ||
               strcmp(*argv, "cmaxburst") == 0) {
            NEXT_ARG();
            if (get_size_and_cell(&cbuffer, &ccell_log, *argv) < 0) {
                explain1("cbuffer");
                return -1;
            }
        } else if 
..


...
    if (!buffer)
        buffer = rate64 / get_hz() + mtu;
    if (!cbuffer)
        cbuffer = ceil64 / get_hz() + mtu;
...
}


static int htb_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
{
...
        if (show_details) {
            fprintf(f, "burst %s/%u mpu %s ",
                sprint_size(buffer, b1),
                1<<hopt->rate.cell_log,
                sprint_size(hopt->rate.mpu, b2));
            fprintf(f, "cburst %s/%u mpu %s ",
                sprint_size(cbuffer, b1),
                1<<hopt->ceil.cell_log,
                sprint_size(hopt->ceil.mpu, b2));
            fprintf(f, "level %d ", (int)hopt->level);
        } else {

...
}


0
30.11.2020, 17:48
1 ответ

Вам следует присмотреться к numpy . Numpy — очень мощный инструмент, который поможет вам организовать ваши матрицы так, как вы этого хотите.

Взгляните на следующий пример:

>>> import numpy as np
>>> a = np.array([[1, 2, 3], [4, 5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.transpose()
array([[1, 4],
       [2, 5],
       [3, 6]])

Вы также можете импортировать данные в numpy из файла данных, такого как csv или txt.

np.genfromtxt('path/to/myfile.csv',delimiter=',',skiprows=1)

Поскольку вы четко не описали, какой стиль данных вы используете, довольно сложно придумать, что вам действительно нужно, но это должно помочь вам начать работу.

Если вы освоите numpy, возможно, вам захочется глубже изучить Pandas .

0
18.03.2021, 22:46

Теги

Похожие вопросы