Когда вы пишете функцию в python, создается новый объект функции, код функции анализируется и байт-компилируется [и сохраняется в атрибуте «func_code»], поэтому при вызове этой функции интерпретатор читает свой байт-код и выполняет его .
Если вы напишите ту же функцию в C, следуя API C / Python, чтобы сделать ее доступной в Python, интерпретатор создаст объект функции, но эта функция не будет иметь байт-кода.
Когда интерпретатор находит вызов этой функции, он вызывает реальную функцию C, поэтому он выполняется со скоростью «машина», а не со скоростью «python-machine».
Вы можете проверить эту функцию проверки, написанную на C:
>>> map.func_code
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'func_code'
>>> def mymap():pass
...
>>> mymap.func_code
<code object mymap at 0xcfb5b0, file "<stdin>", line 1>
Чтобы понять, как вы можете написать C-код для использования на Python, следуйте инструкциям на официальном сайте.
В любом случае, если вы просто выполняете вычисления в N-мерном массиве, numpy должно быть достаточно.