(KDB + / q) Получить диагональные элементы матрицы - PullRequest
1 голос
/ 30 мая 2020

Я хочу получить все диагональные элементы матрицы в kdb + / q.

Например,

q)A:(1 2 3; 4 5 6; 7 8 9)
q)A
1 2 3
4 5 6
7 8 9

вернет 1 5 9

Моя идея состоит в том, чтобы используйте "." получить элементы.

q) A . 1 1 / one of the diagonal elements
5
q) 2 #' til 3 / indices
0 0
1 1
2 2

Но я пробовал много способов и не смог заставить его работать.

1 Ответ

3 голосов
/ 30 мая 2020

Следующий код возвращает диагональные элементы матрицы

(1 2 3; 4 5 6; 7 8 9) @' til 3

Код

  1. генерирует непрерывный список 0, 1, 2 справа
  2. Получает элемент из каждого список слева, применив соответствующий индекс справа (@' наречие)

Generi c форма выглядит так:

getDiagonal: {x@'til count x};
getDiagonal (1 2 3; 4 5 6; 7 8 9)
...