[英]Numpy array.resize() - zeros 'first'
我可以使用array.resize(shape)
來調整我的數組的大小,並將零添加到那些沒有任何值的索引。 如果我的數組是[1,2,3,4]
並且我使用array.resize[5,0]
我得到[1,2,3,4,0]
。 如何將零附加/填充到前面,產生[0,1,2,3,4]
?
我動態地這樣做 - 嘗試使用:
array.resize(arrayb.shape)
我想避免(不惜一切代價)制作數組的內存副本。 那就是反轉數組,調整大小和反轉。 使用視圖將是理想的。
您可以嘗試使用負步幅處理數組(盡管您永遠無法確定調整大小可能不必進行復制):
_a = np.empty(0) # original array
a = _a[::-1] # the array you work with...
# now instead of a, resize the original _a:
del a # You need to delete it first. Or resize will want refcheck=False, but that
# will be dangerous!
_a.resize(5)
# And update a to the new array:
a = _a[::-1]
但我真的建議你讓數組足夠大,如果以任何可能的方式,這似乎不是很漂亮,但我認為這是復制數據的唯一方法。 你的數組也會有一個負面的步幅,所以它不會是連續的,所以如果這意味着你在它上面使用的某些功能必須復制,那你就不走運了。
此外,如果您對a
或_a
切片,則必須copy
,或確保在調整大小之前將其刪除。 雖然你可以給refcheck=False
但這似乎使數據無效。
我相信你可以使用切片分配來做到這一點。 我認為沒有理由為什么numpy
需要為這樣的操作制作副本,只要它對重疊進行必要的檢查(當然,正如其他人已經注意到的那樣, resize
本身可能需要分配一個新的內存塊)。 我用一個非常大的數組測試了這個方法,我看到內存使用沒有跳躍。
>>> a = numpy.arange(10)
>>> a.resize(15)
>>> a[5:] = a[:10]
>>> a[0:5] = 0
>>> a
array([0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
以下顯示分配操作的內存使用沒有跳轉:
>>> a = numpy.arange(100000000)
>>> a.resize(150000000)
>>> a[50000000:] = a[:100000000]
我不知道更好的方法,這只是一個猜想。 如果它不起作用,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.