簡體   English   中英

Numpy array.resize() - 零'第一'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM