2017-08-15 4 views
0

Je travaille actuellement sur un projet python qui interagit avec une base de données kdb +. Une future version de la base de données aura un léger changement, et comme je ne peux pas continuer avec ma programmation python, j'ai pensé que je pourrais essayer moi-même au lieu d'attendre la mise à jour du développeur kdb.Composer des symboles dans KDB

Je travaille avec une base de données maquette qui recrache des symboles générés aléatoirement qui ressemblent à ceci: instr1, instr2, instr81 etc.

J'ai regardé autour et Beleive les symboles sont générés par la ligne .gen.uni:$"instr",/: string til .gen.cfg.uniSize;

La chose que je voudrais réaliser est que les symboles soient exchangeX.instrY au lieu de seulement instrY (où X et Y sont juste quelques nombres générés). Pour convieniece J'ai changé la ligne pour $"instr",/: string til 4 afin que mon cerveau ne blesse pas autant.

Comment pourrait-on réaliser quelque chose comme ça? J'ai découvert la fonction sv ainsi j'ai essayé beaucoup de variations de sv ($"exchange",/: string til 4;$"instr",/: string til 4) mais rien ne semble fonctionner.

Merci pour votre temps!

PS: Je l'ai enlevé quelques accents graves ici et là en raison de la mise en forme de SO

Répondre

1

en utilisant l'opérateur de rouleau est utile pour générer ce type de données: http://code.kx.com/q/ref/random/#roll

Fonction ci-dessous va générer une liste aléatoire de symboles.

paramaters:

x - nombre de symboles que vous souhaitez générés

y - nombre d'échanges différents

z - nombre de différents instruments

q){` sv' flip `$("exch",/:string x?y;"inst",/:string x?z)} 


q){` sv' flip `$("exch",/:string x?y;"inst",/:string x?z)}[100;4;10] 
`exch0.inst2`exch3.inst3`exch3.inst0`exch2.inst0`exch3.inst4`exch3.inst4`exch2.inst0`exch0.inst3`exch3.inst4`exch0.inst5`exch3.inst0`exch1.inst5`exch1.inst7`exch2.inst4`exch2.inst3`exch3.inst1`exch3.inst6`exch2.inst2`exch2.inst.. 
q) 
+0

Merci pour votre réponse! Bien que ça ne marche toujours pas quand je le mets dans le fichier du générateur, il fait ce que je veux! –

1

Est-ce que vous cherchez? Je l'ai espacé un peu.

`$"exchange" ,/: (string til 4) ,' ".inst" ,/: string til 4 
+0

Salut à tous ! Oui, ça ressemble à ça! Lorsque j'essaie de le réintégrer au format du générateur et de le placer dans le fichier du générateur, cela ne fonctionne pas comme prévu: '' .gen.uni: '$" change ", /: (chaîne jusqu'à .gen.cfg.uniSize) , '".inst", /: chaîne jusqu'à .gen.cfg.uniSize''. Des idées là-dessus peut-être? –

+0

Ça me va bien. Quand vous avez dit que cela ne fonctionnait pas comme prévu, qu'attendiez-vous? – notlightnorchroma

+0

Eh bien, votre réponse a parfaitement fonctionné. La chose est que j'essaye de réaliser cette chose dans un générateur de données moqueur. Donc, au lieu d'avoir un 'til 4 'fixe à la fin, je voudrais utiliser la variable' .gen.cfg.uniSize' qui était déjà dans le script (encore une fois, je ne l'ai pas écrit, juste essayer d'y parvenir donc je peux continuer avec mon code python). Je ne suis pas sûr de ce que cette variable est, mais si je recherche la définition, je trouve ceci '' .gen.cfg.uniSize: .cr.getCfgField ['THIS;' groupe; 'cfg.uniSize];' ' –

0

Adverbs enlever une répétition. Pour 100 exemples de l'un des 10 instruments de l'un des 4 échanges:

"."sv/:flip("exchange";"inst"),/:'string 100?/:4 10 

Pour briser ce bas un peu: 100?/:4 10 retourne deux 100 vecteurs, un Dessiné de 0-3, l'autre 0-99, courtoisie de l'adverbe /: (each-right). string les convertit en chaînes. Appelons cela n.

q)show n:string 100?/:4 10 
,"3" ,"2" ,"3" ,"0" ,"3" ,"3" ,"1" ,"2" ,"3" ,"3" ,"3" ,"3" ,"3" ,"1" ,"1" ,".. 
,"9" ,"5" ,"2" ,"3" ,"7" ,"7" ,"6" ,"7" ,"2" ,"0" ,"3" ,"5" ,"0" ,"5" ,"2" ,".. 

Le chaque droit adverbe modifie la fonction join, donc:

q)"exchange",/:n 0 
"exchange3" 
"exchange2" 
"exchange3" 
.. 

et nous pouvons modifier la fonction dérivée,/: avec each-both' préfixer les chaînes dans le premier vecteur "exchange" et ceux dans la seconde avec "inst".

q)("exchange";"inst"),/:'n 
"exchange3" "exchange2" "exchange3" "exchange0" "exchange3" "exchange3" "exch.. 
"inst9"  "inst5"  "inst2"  "inst3"  "inst7"  "inst7"  "inst.. 

Maintenant, nous avons besoin que flip la paire de vecteurs dans un vecteur de paires

q)flip("exchange";"inst"),/:'n 
"exchange3" "inst9" 
"exchange2" "inst5" 
"exchange3" "inst2" 
"exchange0" "inst3" 
"exchange3" "inst7" 
.. 

et modifions sv avec chaque droit à se joindre à tous les deux:

q)"."sv/:flip("exchange";"inst"),/:'n 
"exchange3.inst9" 
"exchange2.inst5" 
"exchange3.inst2" 
"exchange0.inst3" 
"exchange3.inst7" 
..