【发布时间】:2019-07-06 16:23:33
【问题描述】:
我的函数接受不同大小的 numpy 数组列表:
def function1(list list_of_numpy_arrays):
现在我在做:
cdef int[:] a_view = list_of_numpy_arrays[index]
问题是我必须多次索引列表,因此开销大大增加了时间(10 倍)。我正在寻找像cdef int[:] a[5] 这样的东西,我可以在其中拥有一组内存视图,这样我就可以避免索引 python 列表的开销。
如果有解决方案,我也可以传入列表列表。
def function2(list list_of_lists):
【问题讨论】:
-
一些需要考虑的潜在问题。 1) 列表中是否有固定或最大数量的 numpy 数组? 2)是否有可能使所有的numpy数组都具有相同的形状,还是会导致过多的内存浪费? 3) 数组是否需要在 python 中作为 numpy 数组进行访问,还是仅在调用
function1之后在 cython 端处理数据? 4)你需要能够使用[]语法来获取每个numpy数组,还是一个函数调用就足够了? -
1) 我可以将最大数量设为 20,但也可以更少。 2) 每个数组的大小是前一个数组的一半。 3) 我不必在 Python 中索引数组,但需要引用它们才能在 Cython 中再次调用它们。 4)我不确定你的意思,但我需要按索引获取每个 numpy 数组。
-
如果你有这样的可预测数组大小(每个大小的一半),我会考虑为整个事情使用一个大的一维数组,并为每个“子数组”——这可能比我的回答更有意义......
-
没错,这确实更有意义。感谢您的建议。
标签: python cython memoryview