据我所知,在cython中我不能在循环中定义一个数组,我必须在循环之前这样做。如果在循环内部我将在循环外初始化的数组设置为在每次迭代时大小不同,会发生什么?
想象一下这样的事情:
cdef int i
cdef int [:] A
for i in range(100):
A = np.zeros(np.random.randint(10, 1000), dtype=np.int32)
从迭代到迭代,A
的大小会有很大差异。这会导致任何类型的内存问题吗?当我通过循环时,有人可以解释内存中究竟发生了什么吗?如果这有问题,还有其他选择吗?感谢
答案 0 :(得分:1)
没有问题 - 内存视图的引用计数与普通的Python对象相同,因此当新数组分配给A
时,旧引用计数将降为0,并且它将被释放。
唯一的例外是你从指针而不是Python对象创建内存视图,在这种情况下你必须处理内存。但这并不适用于此。
(正如@hpaulj在评论中所说,这不会从Cython获得任何加速,但我认为你的真实代码在循环中做了更多的工作)