分割数组时减少内存使用的最佳实践

3 投票
3 回答
968 浏览
提问于 2025-04-20 06:52

我有一个数组,想把它分成两半。因为对称的原因,我只想保留数组的左半部分。

我可以通过下面的方式把数组分成两半:

[a,b] = numpy.split(c,2)

这里的 c 也是一个数组。

有没有办法只返回 'a' 这个数组,或者在分割数组后立刻把 'b' 这个数组从内存中删除呢?

3 个回答

0

我不太确定,但我觉得这样做可能是最好的,因为它依赖于 list 的实现(文档),我相信这个实现是正确的:

>>> r = range(10)
>>> r
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del r[5:]
>>> r
[0, 1, 2, 3, 4]

另外可以参考一下 列表的 del 语句

0

简单来说,你可以使用delete这个函数来实现这个目的!下面是一个例子:

array=np.array([1,2,3,4])
x=len(array)/2
first_h=np.delete(array,array[x-1:])         #second half

演示:

>>>print first_h
>>>[1,2]
4

你可以用下面的方式复制前半部分:

a = x[len(x)//2:].copy()

这样做的话,需要分配新的内存来存放复制的内容,所以在这个过程中,你的内存使用量会暂时增加到1.5倍。

另外,你也可以直接使用下面的方式:

a = x[len(x)//2:]

这样可以获取前半部分的引用,但这样做并不会把后半部分从内存中移除。

撰写回答