Соотношение между iasc и рангом в q kdb - PullRequest
0 голосов
/ 06 июня 2019

Насколько я понимаю, iasc и rank работают внутренне в следующем порядке:
iasc: пошаговая процедура до ранга

original: 2 7 3 2 5 / 0->2, 1->7, 2->3, 3->2, 4->5 //Index item mapping
asc original returns 2 2 3 5 7 / 0->2, 1->2, 2->3, 3->5, 4->7 // Index item mapping 
iasc original returns  0 3 2 4 1 / 0->0, 1->3, 2->2, 3->4, 5->1 // Index item mapping /// iasc using asc internally
asc iasc original returns 0 1 2 3 4 / 0->0, 1->1, 2->2, 3->3, 4->4 // Index item mapping
iasc iasc original returns 0 4 2 1 3 // hence it is equal to rank original

rank:

original: 2 7 3 2 5 / 0->2, 1->7, 2->3, 3->2, 4->5 //Index item mapping
asc original returns 2 2 3 5 7 / 0->2, 1->2, 2->3, 3->5, 4->7 // Index item mapping 
rank original -> 0 4 2 1 3 / rank of orignal items of list in sorted list /// rank using asc internally

Но когда япосмотрите код iasc и rank, оба они используют rank внутренне.Подскажите, пожалуйста, как внутренне работает iasc и rank (моё понимание неверно)?

1 Ответ

4 голосов
/ 06 июня 2019

Вы правы в том, что iasc iasc эквивалентно использованию rank .Если вы заглянете внутрь функций iasc и rank, вы увидите, что они очень похожи:

q)rank
k){$[0h>@x;'`rank;<<x]}
q)iasc
k){$[0h>@x;'`rank;<x]}

В этом случае код k < будет выполнять ту же работу, что и iasc,поэтому rank по существу использует iasc iasc для внутреннего использования, поскольку << является кодом k для iasc iasc.

Когда вы говорите, что они оба используют ранг внутри, вы можете ссылаться на '`rank,который используется, чтобы выдать ошибку, если используется что-то кроме списка, так как функция использует if-else, чтобы определить, является ли ввод списком.

...