2015年3月16日月曜日

[kdb] Dictionary and Table

dictionaryとtableに関するメモ

□ dictionary
key(domain list)とvalue(range list)の対応をあわらしたもの

QforMortals/dictionaries

q) dict: ()!()    / 空で作成
q) dict[`a]:1     / 値を追加
q) dict[`b]:2.0   / intとfloatで型が違うのでエラー
'type
q) dict
a| 1
q) type value dict
7h
q) type key dict
11h

q) dict: ()!()   / 空で作成
q) dict[`]: ::   / generic nullを最初に入れると型が不定になる
q) dict[`a]: 1;
q) dict[`b]: 2.0;
q) dict
 | ::
a| 1
b| 2f
q) type value dict
0h

q) dict@`b      / @でもアクセスできる
2f
q) dict.a       / 不定型にすると"."でアクセスできるようになるっぽい
q) dict.c:`C    / 値の追加もできる
q) dict
 | ::
a| 1
b| 2f
c| C

q) dict: dict _`   / `を削除したい場合
q) dict _`a        / これは消えて見えるだけ
b| 2f
c| `C

q) dict2.a:1       / 何も無いところから定義するとこちらの形になる
q) dict2
 | ::
a| 1
q)dict3[`a]: 1     / dictionaryがないとダメ
'type

※「::」は generic null をあらわす非常にわかりにくい記号...



□ dictionaryとtable
dictionaryはテーブルに変換することができる
dictionaryの作り方によって変換方法は主に2種類ある

※前提: dictionaryのkeyがsymbolのリストであること
(A) valueがatomである(もしくはatomとして扱いたい何か)
⇒ enlist
(B) valueがconformableなリストである(atomか同じ長さのリスト)
⇒ flip
q) .Q.w[]        / valueがatomのリスト
used| 120288
heap| 67108864
peak| 67108864
wmax| 0
mmap| 0
mphy| 16640253952
syms| 591
symw| 19098
q) flip .Q.w[]   / flipはダメ
'rank
q) enlist .Q.w[]
used   heap     peak     wmax mmap mphy        syms symw 
---------------------------------------------------------
120336 67108864 67108864 0    0    16640253952 591  19098


q) dict: `a`b`c!(1 2;3 4;5 6)
q) dict
a| 1 2
b| 3 4
c| 5 6
q) flip dict   / valueがリストのときはflipで
a b c
-----
1 3 5
2 4 6
q) enlist dict
a   b   c      / enlistだと違う形のテーブルになる
-----------
1 2 3 4 5 6


0 件のコメント:

コメントを投稿