cython
24 строки · 791.0 Байт
1import random
2from libc.stdlib cimport malloc, free
3
4def random_noise(int number=1):
5cdef int i
6# allocate number * sizeof(double) bytes of memory
7cdef double *my_array = <double *> malloc(
8number * sizeof(double))
9if not my_array:
10raise MemoryError()
11
12try:
13ran = random.normalvariate
14for i in range(number):
15my_array[i] = ran(0, 1)
16
17# ... let's just assume we do some more heavy C calculations here to make up
18# for the work that it takes to pack the C double values into Python float
19# objects below, right after throwing away the existing objects above.
20
21return [x for x in my_array[:number]]
22finally:
23# return the previously allocated memory to the system
24free(my_array)
25