Python 拆分阵列时减少内存使用的最佳做法

Python 拆分阵列时减少内存使用的最佳做法,python,arrays,memory,numpy,Python,Arrays,Memory,Numpy,我有一个数组,我想把它分成两半。由于对称性,我只对保留数组的左半部分感兴趣 我可以通过以下方式将阵列一分为二: [a,b] = numpy.split(c,2) 其中c也是一个数组 有没有办法只返回“a”数组,或者在拆分数组后立即从内存中删除“b”数组?只需使用函数即可实现此目的!这是一个例子: array=np.array([1,2,3,4]) x=len(array)/2 first_h=np.delete(array,array[x-1:]) #second half

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

我可以通过以下方式将阵列一分为二:

[a,b] = numpy.split(c,2)
其中c也是一个数组


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

只需使用函数即可实现此目的!这是一个例子:

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]

你可以用电脑复制上半部分

a = x[len(x)//2:].copy()
这需要分配拷贝并移动内容(因此暂时需要1.5倍的内存)

否则你只能说

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

要获取对前半部分的引用,但不会从内存中删除另一部分,我不确定,但我认为这可能是最好的,因为它依赖于
列表的实现(),我相信它是正确的:

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

另请参见。

问题是关于Numpy
数组的
,而不是关于Python
列表的
。问题是关于Numpy
数组的
,它们没有
删除
方法。您的答案仅适用于Python
列表。是的,谢谢提醒!我想知道为什么我会输了那张赞成票!现在我注意到了!谢谢我编辑答案!我也不确定这是否有效。当切片到numpy数组时,您不需要复制,而是在原始数组中创建一个“视图”,这样即使删除了原始数组,也可以保留大块内存。关于
np.delete
的文档对此没有太多说明,但我想制作一个显式副本,以便像@6502的答案那样释放原始数组是一种方法。在scipy doc中,我们了解到delete函数的输出是一个数据数组,一个arr的副本,其中删除了obj指定的元素。请注意,删除不会在适当的位置发生。如果“轴”为“无”,则“输出”为展平阵列。