2016-12-14 65 views
1

我給earlier的回答對我提出了一個問題:是否可以在不重複一堆括號的情況下引用numpy數組的視圖或切片?如何引用numpy數組的切片/視圖

例如,在答案中,我使用了s=np.argsort(u),然後對「虛擬」排序的u[s]進行了所有計算。我遇到過那種情況,那麼我需要一個布爾值的數組,給出類似於u[s][mask]的東西。對於更大的數據,我可能有一個掩碼掩碼的掩碼。 。 。直到事情開始看起來像史酷比劇集的結尾。

但是,如果我將該數組分配給一個變量b=a[s][mask]並更改b,a不會改變,所以我最終在我的計算中攜帶了一堆括號。我已經嘗試過uv=u.view()[s]的各種安排,但似乎.view()只能看到整個陣列。我還缺少另一種方法嗎?

+0

問題是'[mask]'。由於它構成數組「a」的任意子集,它總是返回一個新數組,而不是一個視圖。你能避免在第一時間製作面具嗎? –

回答

1

你可能不能夠解決的u[s],但在更復雜的情況下,像u[s][mask]簡單的情況下,您可以:

t = s[mask] 
u[t] # same as u[s][mask] 

也就是說,你可以簡化你的面具,以一個單一的變量,但你可能不能夠完全擺脫它,除非你想寫你自己的包裝類__getitem____setitem__

+1

但是如果我只有口罩?我想我可以做't = np.indices(u.shape)[mask1] [mask2] [mask3]'。我認爲它最終會出現同樣的問題'pandas'有一些抽象層,它很難區分片和複製之間沒有'.loc'來區分 –

+0

@DanielForsman:是的。在你的問題中,你提到了's = np.argsort(u)'這不是一個掩碼,而是一系列索引。我從這個假設開始工作。如果你有很多的蒙版,你可以將它們組合起來,並使用原始數組上的組合版本。 –