分割数组时减少内存使用的最佳做法

时间:2014-09-07 12:01:38

标签: python arrays memory numpy

我有一个阵列,我想分成两半。由于对称性,我只对保持数组的左半部分感兴趣。

我可以通过说:

将数组分成两半
[a,b] = numpy.split(c,2)

其中c也是一个数组。

有没有办法只返回'a'数组,或者在拆分数组后立即从内存中删除'b'数组?

3 个答案:

答案 0 :(得分:4)

您可以使用

复制上半部分
a = x[len(x)//2:].copy()

这需要分配副本并移动内容(因此暂时需要1.5倍的内存)

否则你可以说

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

获取对前半部分的引用,但另一部分不会从内存中删除

答案 1 :(得分:1)

您只需使用 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]

答案 2 :(得分:0)

我不确定,但我认为这可能是最好的,因为它依赖于list的实施(docs),我相信它做得恰到好处:

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

另见del statement for lists