【发布时间】:2014-10-31 19:50:56
【问题描述】:
我有一个想要分成两半的数组。由于对称性,我只对保留数组的左半部分感兴趣。
我可以将数组分成两半:
[a,b] = numpy.split(c,2)
其中 c 也是一个数组。
有没有办法只返回“a”数组,或者在拆分数组后立即从内存中删除“b”数组?
【问题讨论】:
标签: python arrays memory numpy
我有一个想要分成两半的数组。由于对称性,我只对保留数组的左半部分感兴趣。
我可以将数组分成两半:
[a,b] = numpy.split(c,2)
其中 c 也是一个数组。
有没有办法只返回“a”数组,或者在拆分数组后立即从内存中删除“b”数组?
【问题讨论】:
标签: python arrays memory numpy
你可以复制前半部分
a = x[len(x)//2:].copy()
这将需要分配副本并移动内容(因此暂时需要 1.5 倍的内存)
否则你只能说
a = x[len(x)//2:]
获取前半部分的引用,但其他部分不会从内存中删除
【讨论】:
您只需使用 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]
【讨论】:
arrays,他没有 remove 方法。您的答案仅适用于 Python lists。
np.delete 的文档对此并没有说太多,但我想制作一个明确的副本,以便可以像@6502 的答案那样释放原始数组。
我不确定,但我认为这可能是最好的,因为它依赖于 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]
【讨论】:
arrays,而不是关于 Python lists。