Można użyć ctypes, i mają podwójne-array (lub float tablicy) dokładnie tak, jak” d mieć w C, zamiast trzymać swoje dane na liście. Jest to dość niski poziom, ale jest zalecany, jeśli potrzebujesz świetnej wydajności i jeśli twoja lista ma stały rozmiar.
Można stworzyć odpowiednik C double array[100];
w Pythonie, wykonując:
array = (ctypes.c_double * 100)()
Wyrażenie ctypes.c_double * 100
daje klasę Pythona na tablicę podwójnych, 100 pozycji długich. Aby podłączyć go do pliku, można po prostu użyć buffer
aby jego zawartość:
>>> f = open("bla.dat", "wb")
>>> f.write(buffer(array))
Jeśli dane są już na liście Pythona, pakowanie go w podwójnej tablicy może lub nie może być szybsze niż dzwonienie struct
jako w AGF zaakceptowany odpowiedź - odejdę pomiarowy, który jest szybszy jak praca domowa, ale cały kod trzeba to:
>>> import ctypes
>>> array = (ctypes.c_double * len(floatlist))(*floatlist)
Aby go zobaczyć jako ciąg znaków, po prostu zrobić: str(buffer(array))
- jedną wadą jest to, że ciebie musisz dbać o rozmiar float (float vs double) i typ float zależny od CPU - moduł struct może to zająć.
Duża wygrana jest to, że z tablicy pływaka można nadal wykorzystywać elementy jak numery, dzięki dostępowi potem po prostu tak, jakby gdzie zwykły lista Python, mając wtedy łatwo dostępny jako region płaska pamięci z buffer
.
'' f''ty dostaniesz C * f * loat (32 bity); bez wątpienia chcesz pływać w Pythonie aka C * d * podwójny (64 bity), więc ty i twoi zwolennicy powinniście używać '' d'' –
Masz rację, byłem nieostrożny przy moich typach danych. Ale tak naprawdę chciałem pływać z jedną precyzją. – MxyL