我有一個包含複數的一維numpy數組(例如。numpy.complex64)。我需要在這個數組上創建視圖,但我不知道如何創建一個視圖給定一個列表或索引範圍,以在視圖中包含。非連續項目的NumPy數組視圖
>>> myArray = np.ndarray(shape=(1000,), dtype=np.complex64)
我知道如何創建連續項的視圖,例如第100個元素:
>>> myView = myArray[:100]
當我嘗試,它不可能建立在單一項目視圖,像myArray的[2]因爲如果我修改了這個值,它不會改變底層數組。這是確定的,但我希望有一種方法來構建由多個任意索引視圖,所以這樣的功能將是巨大的:
>>> myView = createView(myArray, indices=(0, 1, 6, 7, 13))
這將返回一個指向列表中給出的索引視圖(或任何可迭代的形式),如果我更改myView,它會改變myArray像它應該。
這是可能的,還是有一個理智的解決方法? 感謝
編輯:
要解釋爲什麼我需要這樣的:我想數組OpenCL設備的內存(反面)複製。我需要設備上元素的順序不同於原始數組,而這些較短的數組將被視爲向量,而矩陣乘法將在OpenCL內核中進行。如果元件沒有按要求的順序複製到設備存儲器中,則不可能實現存儲器合併,並且會出現顯着的性能下降,更不用說在OpenCL端需要額外的邏輯了。
在我的情況下,可以用均勻間隔的視圖來做到這一點,但我想知道是否有更一般的方法。如果可以完成更通用的實現,那麼CPU性能下降很小。
這不是真的有可能使一個不均勻間隔視圖。但是可以以各種方式使用任意索引列表。你需要什麼? –
實際上我用完原始數組的所有索引一次,並且想要創建具有較短長度的多個數組,並引用原始數組。 (在我的例子中,可以用均勻間隔的視圖來完成,但我想知道是否可以用更一般的方式。)我想將數據複製到OpenCL設備內存,並使用PyOpenCL InOut作爲過濾數組,以更改原始數組中的正確索引。 – tamacun