假设有一个列表 L = [A_1, A_2, ..., A_n]
,每个A_i
都是长度为1024的numpy.int32
数组。
(大多数情况下 1000 < n < 4000)。
经过一些分析,我发现其中最耗时的操作之一是加和:
def summation():
# L is a global variable, modified outside of this function
b = numpy.zeros(1024, numpy.int32)
for a in L:
b += a
return b
注意:我不认为我可以定义大小为1024 x n
的2D数组,因为n
是不固定的:某些元素在运行时动态添加/删除到L中,因此len(L) = n
可能在1000和4000之间变化。
我能通过使用Cython获得显着的改进吗?如果可以,应该如何重构这个小函数(是否需要添加一些cdef
类型?)
或者你能看到其他可能的改进吗?
int16 numpy数组
,而我希望结果res
仍然是int32 numpy数组
,我该如何修改此代码吗? - Basjint16
,而输出仍然是int32
,我将cdef int* x
替换为cdef short* x
,并将x = <int *>((<np.ndarray>a[j]).data)
替换为<short *>
。您认为这是最好的方法吗? - Basj