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