2016-05-07 146 views
2

我正在尋找一個現有的numpy陣列,並從現有的數組中創建一個新的數組,但在開始和結束從現有數組的值?如何從現有的Numpy陣列中創建一個Numpy陣列

例如:

arr = np.array([1,2,3,4,5,6,7,8,9,10]) 

def split(array): 
    # I am only interested in 4 thru 8 in original array 
    return new_array 

>>>new_array 
>>> array([4,5,6,7,8]) 
+2

'arr [3:8]'或'arr [3:8] .copy()'如果你想要一個副本而不是視圖。 – Jaime

回答

1

只是這樣做:

arr1=arr[x:y] 

其中,

X - >開始索引

ý - >結束索引

實施例:

>>> import numpy as np 
>>> arr = np.array([1,2,3,4,5,6,7,8,9,10]) 
>>> arr 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> arr1=arr[3:8] 
>>> arr1 
array([4, 5, 6, 7, 8]) 

在上面的例子中,我們使用賦值語句,Python中的賦值語句不會複製對象,它們會在目標和對象之間創建綁定。

您可以使用.copy()進行淺拷貝。

淺拷貝構造新化合物的對象,然後(在可能的程度上)插入到其在原始找到的對象的引用。

>>> arr1=arr[3:8].copy() 
>>> arr1 
array([4, 5, 6, 7, 8]) 

您可以使用deepcopy()做了深刻的副本。

深層副本構造新化合物的對象,然後,遞歸地,插入拷貝到它在原始找到的對象的。

>>> arr2 = deepcopy(arr[3:8]) 
>>> lst2 
array([4, 5, 6, 7, 8]) 

另外參考:

copy — Shallow and deep copy operations

Shallow and Deep Copy

+1

'deepcopy'與列表有關,但與'numpy'數組無關。 – hpaulj

+0

是的,專門列表。把它放在一起供參考。 'copy()'是問題的解決方案。 –

+3

從技術上講,'arr1'是一個新的數組(具有自己的'形狀'和'id'),但它與'arr'共享底層數據緩衝區。但是'arr1 = arr [[3,4,5]]'是完整的副本。從長遠來看,瞭解'numpy'''view''和'copy'之間的區別很重要。 – hpaulj

0

您需要切片和複製陣列。首先,由@AniMenon提到的切片可以通過殖民化索引來實現。

接下來的副本,您可以選擇使用內建的.copy()或導入副本並使用copy.copy()。

無論哪種方式,這是避免以後意外互連的重要步驟。