Vinnaren i pepparkakshustävlingen!
2011-05-11, 15:00
  #1
Medlem
en kopp kaffes avatar
Finns det något bra sätt att hantera matriser på i Python? Som det ser ut nu så skapar jag matriser så här:

Kod:
SubMatrix = [[1,0,1],[0,1,1]]

När jag försöker skapa en binär matris på storleken 4000x6000 och göra matrismultiplikation så tar det väldigt lång tid... ~30 sekunder, vilket är alldeles för lång tid. Finns det något smidigt sätt att lösa det på utan wrappers?
Citera
2011-05-11, 15:05
  #2
Moderator
vhes avatar
Osäker på exakt vad du menar med "utan wrappers". Kikat på http://numpy.scipy.org/ ?
Citera
2011-05-11, 15:58
  #3
Medlem
en kopp kaffes avatar
Citat:
Ursprungligen postat av vhe
Osäker på exakt vad du menar med "utan wrappers". Kikat på http://numpy.scipy.org/ ?

Jag tänkte på wrappers som SWIG och Boost, dvs. använda kompilerad C-kod som funktioner.

Numpy eller SciPy har jag kört en del tidigare... det verkar som att det är snabbare:
http://stackoverflow.com/questions/9...f-python-lists

Får testa det... tack!
Citera
2011-05-17, 18:22
  #4
Medlem
en kopp kaffes avatar
Jag har nu försökt med diverse paket, och uppnått en lite bättre hastighet. Den största boosten var när jag beslutade mig för att Python inte lämpade sig för det här och gick över till C. Förbättringen blev väldigt stor, vi snackar ~10^5 gånger. Förbättringen beror dels på att jag lämnade bisect-sorterade listor till förmån för AVL-träd (med O(log n)-access), bitskyfflande i int-vektorer etc.

Möjligen att jag gör någon form av SWIG-paket i framtiden. Python är underbart i sin enkelhet, det kan man inte förneka.
Citera
2011-05-18, 16:56
  #5
Moderator
vhes avatar
Vill du skriva i python men är intresserad av hastighet kan det vara värt att slänga ett öga på http://pypy.org/ som man nog får säga har lämnat proof-of-concept-stadiet för ett tag sen.
Tyvärr är stödet för just numpy rätt kass, men jag undrar om inte det du ägnar dig åt kan tjäna en del på jittandet.
Men jag får villigt erkänna att matematikjonglerande är något jag är jävligt dålig på, så mina gissningar är troligen helt åt helvete :)

Men det är onekligen så att python inte lämpar sig till allt. Right tool for the job, och så...
Citera
2011-06-18, 22:53
  #6
Medlem
nudieses avatar
Numpy + Cython kan vara värt ett försök. Då får du nästan ren Pythonkod, med nästan samma fart som ett C-program.
Citera
2011-06-20, 08:59
  #7
Medlem
Jag brukar skriva python-moduler för krävande kod i C. På så sätt kan man ju kombinera C:s snabba exekvering där det behövs och pythons snabba utveckling på resten.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback