Эффективная работа с матрицами в Stata - PullRequest
0 голосов
/ 09 сентября 2018

Я пытался работать с матрицами в Stata, но мне сложно, если не путать.

В NumPy Я могу сделать:

In [1]: A = np.array([np.arange(1,7),np.arange(7,13),np.arange(13,19),
                      np.arange(19,25),np.arange(25,31),np.arange(31,37)])

In [2]: A
Out[2]: 
array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18],
       [19, 20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29, 30],
       [31, 32, 33, 34, 35, 36]])

In [3]: B = A[2, -3]

In [4]: B
Out[4]: 16

In [5]: B = A[::2,:]

In [6]: B
Out[6]: 
array([[ 1,  2,  3,  4,  5,  6],
       [13, 14, 15, 16, 17, 18],
       [25, 26, 27, 28, 29, 30]])

In [7]: B = A[:,::2]

In [8]: B
Out[8]: 
array([[ 1,  3,  5],
       [ 7,  9, 11],
       [13, 15, 17],
       [19, 21, 23],
       [25, 27, 29],
       [31, 33, 35]])

Можно ли что-то подобное сделать в Stata?

1 Ответ

0 голосов
/ 09 сентября 2018

Когда вы имеете дело с матрицами, лучше всего использовать mata.

Это матричный язык Stata, который предлагает больше гибкости. Тем не менее, вам нужно помнить, что в Stata матричный вложенный сценарий работает иначе, потому что индексирование начинается с 1, а не 0. Кроме того, в отличие от NumPy, Stata не поддерживает отрицательный суб-сценарий или оператор шага.

Чтобы получить то, что вы хотите, вам нужно использовать определенные функции :

mata: A = (1..6 \ 7..12 \ 13..18 \ 19..24 \ 25..30 \ 31..36)
mata: A

        1    2    3    4    5    6
    +-------------------------------+
  1 |   1    2    3    4    5    6  |
  2 |   7    8    9   10   11   12  |
  3 |  13   14   15   16   17   18  |
  4 |  19   20   21   22   23   24  |
  5 |  25   26   27   28   29   30  |
  6 |  31   32   33   34   35   36  |
    +-------------------------------+

mata: B = A[3, cols(A)-2]
mata: B
16

Выбор строк:

mata: B = select(A, mod(1::rows(A), 2))
mata: B

        1    2    3    4    5    6
    +-------------------------------+
  1 |   1    2    3    4    5    6  |
  2 |  13   14   15   16   17   18  |
  3 |  25   26   27   28   29   30  |
    +-------------------------------+

mata: B = select(A, !mod(1::rows(A), 2))
mata: B

        1    2    3    4    5    6
    +-------------------------------+
  1 |   7    8    9   10   11   12  |
  2 |  19   20   21   22   23   24  |
  3 |  31   32   33   34   35   36  |
    +-------------------------------+

Выбор столбцов:

mata: B = select(A, mod(1..cols(A), 2))
mata: B

        1    2    3
    +----------------+
  1 |   1    3    5  |
  2 |   7    9   11  |
  3 |  13   15   17  |
  4 |  19   21   23  |
  5 |  25   27   29  |
  6 |  31   33   35  |
    +----------------+

mata: B = select(A, !mod(1..cols(A), 2))
mata: B

        1    2    3
    +----------------+
  1 |   2    4    6  |
  2 |   8   10   12  |
  3 |  14   16   18  |
  4 |  20   22   24  |
  5 |  26   28   30  |
  6 |  32   34   36  |
    +----------------+

Вам придется изучать матрицы в Stata и mata более тщательно.

Введите help matrix и help mata из командной строки Stata для получения подробной информации.

...