Bonjour.
Je commence l'apprentissage de LUA. Pour me faire la main, je traite la question de ce fil.
Comme je suis à l'aise en PYTHON, j'ai d'abord fait un programme uniq_seq.py :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
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 #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys def keep_seq(filemane): with open(filemane, "r") as fobj: data = fobj.read().splitlines() # Trie par ordre alphabétique data.sort() ref = data[0] res = [ref] for seq in data[1:]: if seq.startswith(ref): continue ref = seq res.append(ref) return res if __name__ == '__main__': filemane = sys.argv[1] print("\n".join(keep_seq(filemane)))
Puis uniq_seq.lua :
Lorsque je compare :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37 #!/usr/bin/lua local function read_file(filemane) local arr = {} local i = 0 local file = io.open(filemane, "r") if file then for line in file:lines() do i = i + 1 arr[i] = line end end io.close(file) return arr end local filemane = arg[1] local data = read_file(filemane) -- Trie par ordre alphabétique table.sort(data) local ref = data[1] local res = {ref} local i = 1 for _, seq in ipairs(data) do local pattern = string.format("^%s", ref) _, n = string.gsub(seq, pattern, "") if n == 0 then ref = seq i = i + 1 res[i] = ref end end print(table.concat(res, "\n"))
Je suis déçu des performances de mon programme LUA. Une rapide analyse a montré qu'il n'y a pas de "point d'étranglement"; tout est plus lent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 time ./uniq_seq.py data/sorted_length_pool_piRNA_embryo_02h_GSM12.txt > benchmark/out_py real 0m4.191s user 0m3.648s sys 0m0.504s time ./uniq_seq.lua data/sorted_length_pool_piRNA_embryo_02h_GSM12.txt > benchmark/out_lua real 0m27.840s user 0m27.184s sys 0m0.576s diff benchmark/out_py benchmark/out_lua (rien)
Qu'est ce que je peux faire pour réduire le temps d'exécution ?
Partager