分割数组时减少内存使用的最佳实践
我有一个数组,想把它分成两半。因为对称的原因,我只想保留数组的左半部分。
我可以通过下面的方式把数组分成两半:
[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:]
这样可以获取前半部分的引用,但这样做并不会把后半部分从内存中移除。