2017-08-15 128 views
-1

其實,我正在做一個關於numpy array的序列操作,因此,我想知道如何快速訪問a[i]如何根據最後一個元素訪問np數組元素

(因爲我訪問a[i-1]在最後一個循環,因此,在c++,我們可以簡單地訪問a[i]加1的a[i-1]地址,但我不知道是否有可能在numpy的感謝。

回答

0

我不認爲這是可能的/ a[i]是最快的方法。

Python是不是c++一種編程語言,更容易學習(和使用),這當然是有代價的,這些成本的一個是,它慢了。

你所談論的引用可能是「危險的」,因此python使它們不能(容易地)被人們使用,以保護它們免於不理解的事物。

雖然引用是快,你不能在Python中使用它們(因爲它是反正慢,在使用引用的差異與否不管那麼多了)

0

最好不要認爲一個Python的作爲C++數組的NumPy: ndarray。他們非常不同。 Python還提供其自己的本地list對象,並在其標準庫中包含一個array模塊。

Python列表的行爲大部分類似於通用數組(如許多編程語言中所見)。這是一個有序的序列;元素可以通過從0到(但不包括)列表長度的整數索引來訪問(len(mylist));元素範圍可以使用「切片」符號進行訪問(mylist [start_offset:end_offset])返回另一個列表對象;負數索引將作爲列表末尾的偏移量處理(mylist [-1]是列表的最後一項),依此類推。

另外,它們支持一些方法,如.Count之間().find().replace()

與大多數編程語言中的數組不同,Python列表是異構的。這些元素可以是Python中任何對象類型的任意混合,包括對嵌套列表,字典,代碼,類,生成器對象和其他可調用第一類對象的引用,當然還包括自定義對象的實例。

Python數組模塊允許實例化同質列表狀對象。那就是使用十幾種基本數據類型(字符或Unicode,有符號或無符號的短或長整數,浮點或雙精度浮點)中的任何一種來實例化它們。索引和切片與Python本機列表相同。

Python array.array()實例的主要優點在於它們可以將大量元素存儲得比更一般化的列表對象更加緊湊。對這些數組的各種操作可能比通過迭代或以其他方式引用本地Python列表中的元素所執行的類似操作要快一些,因爲在更緊湊的數組佈局(內存中)中引用的局部性更大,並且由於類型約束消除了某些處理廣義對象時發生的調度開銷。

NumPy另一方面比Python 陣列模塊複雜得多。

一方面,ndarray可以是多維的,可以動態地重新塑造。通常從線性開始,並將其重塑爲矩陣或其他更高維度的結構。此外,ndarray支持比Python 陣列模塊更豐富的一組數據類型。 NumPy還實現了一些相當先進的功能。

但是NumPy的真正性能優勢與它如何「矢量化」大多數操作有關,如何在數據結構上廣播它們(可能使用CPU支持的任何SIMD功能,或者在過程中使用任何SIMD功能。常見的矩陣運算,當用Python for NumPy正確編寫時,以本機機器碼速度執行,這種性能優勢遠遠超出了引用局部性的微小影響,並且避免了使用簡單的模塊模塊獲得的調度表