簡體   English   中英

有效地用半值索引 numpy 數組

[英]Indexing numpy array with half-values efficiently

我想用整數和半值索引一個 numpy 數組。 這大致是我的想法:

>>> a = HalfIndexedArray([[0,1,2,3],[10,11,12,13],[20,21,22,23]])
>>> print(a[0,0])
0
>>> print(a[0.5,0.5])
11
>>> print(a[0,1+0.5])
3

只有半值用作索引,所以我想可以構造某種包裝器,將值存儲在整數索引處,通過乘以給定的小數索引來訪問這些值。

可以構造某種輔助函數來獲取和設置相應的值; 但是,如果仍然可以使用本機 numpy 索引功能(切片等),那就更好了。 此外,顯着的開銷是不可接受的,因為這些數組將用於數值計算。

它基本上是我正在尋找的一些有效的語法糖:這是可以在 numpy(或更廣泛地說,在 Python)中實現的嗎?

我的建議是,與其創建一個單獨的類來解釋半整數索引,不如在輸入端處理它。 如果您采用半整數索引系統並將輸入乘以 2,則可以將其簡單地轉換為普通整數索引。

這可能會導致代碼更清晰、更容易維護。

但是,如果您想繼續創建自定義迭代,這可能會有所幫助: https ://thispointer.com/python-how-to-make-a-class-iterable-create-iterator-class-for-it /

為了改變[]的行為,您需要重新實現__getitem__類方法。 由於您的課程在其他情況下將表現為標准列表,因此您可以這樣做:

class HalfIndexedList(list):
    def __getitem__(self, key):
        return super().__getitem__(int(key * 2))

a = HalfIndexedList([10,11,12,13,14,15])
for i in range(0, 6):
    print(f"{i/2 = }, {a[i/2] = }") 

但是,我同意@Otto 的回答以及處理輸入端以獲得更簡潔的代碼要好得多的說法。 半索引沒有意義,而且非常不直觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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