Я думаю, что вы используете неправильный тип данных.Вместо простого списка списков, вы должны использовать список пустых массивов.Преимущества использования пустых массивов объектов Python (таких как списки) весьма незначительны - в отличие от числовых типов, они не сохраняются особенно эффективно, они не быстро выполняют вычисления, и вы не можете ускорить их в Cython.Поэтому самый внешний уровень также может быть обычным списком Python.
Однако все внутренние уровни выглядят как однородные массивы целых чисел, и поэтому будут идеальными кандидатами для массивов Numpy (особенно, если вы хотите обработать ихв Cython).
Следовательно, создайте свой список следующим образом:
a = [ np.array([1],dtype=np.int), np.array([2,3],dtype=np.int) ]
(или используйте tolist
для массива numpy)
Для своей функции вы можете определить егокак:
def process_result(list a):
cdef int[:] item
for item in a:
#operations on the inner arrays are fast!
pass
Здесь я предположил, что вы, скорее всего, хотите перебрать список.Обратите внимание, что набирать a
как list
довольно мало пользы, поэтому вы можете просто оставить его нетипизированным (для принятия любого объекта Python), а затем передать его и другим итерируемым элементам, таким как исходный массив numpy.