[英]what is a reason to use ndarray instead of python array
我構建了一個類,對未來的數據進行了一些迭代。 數據采用數組形式,不使用numpy對象。 在我的代碼中,我經常使用.append
來創建另一個數組。 在某些時候,我將一個大數組1000x2000更改為numpy.array。 現在我在出錯后出錯了。 我開始將所有數組轉換為ndarray,但像.append
這樣的注釋不再起作用了。 我開始遇到指向行,列或單元格的問題。 並且必須重建所有代碼。
我試着回答一個問題的答案:“使用ndarray超過正常數組的優點和優勢”我找不到合理的答案。 你能寫什么時候我應該開始使用ndarrays嗎?如果在你的練習中你使用它們或只堅持一個。
很抱歉,如果問題是新手級別,但我是python的新手,只是嘗試從Matlab移動並想了解什么是利弊。 謝謝
NumPy和Python數組共享高效存儲在內存中的屬性。
NumPy數組可以加在一起,乘以一個數字,你可以在一個函數調用中計算所有值的正弦值,等等。正如HYRY指出的那樣,它們也可以有多個維度。 你不能用Python數組做到這一點。
另一方面,Python數組確實可以附加到。 請注意,NumPy數組可以連接在一起( hstack()
, vstack()
,...)。 也就是說,NumPy數組主要是為了擁有固定數量的元素。
通常首先迭代地構建一個列表(或Python數組),然后將其轉換為NumPy數組(使用numpy.array()
,或者更有效地使用numpy.frombuffer()
,如HYRY所提到的):這允許非常方便地執行對數組(或矩陣)的數學運算(復雜運算的簡單語法)。 或者,可以使用numpy.fromiter()
從迭代器構造數組。 或者loadtxt()
從文本文件構造它。
使用NumPy陣列至少有兩個主要原因:
是的,您不能簡單地將列表轉換為NumPy數組,並期望您的代碼繼續工作。 方法不同,bool語義不同。 為了獲得最佳性能,即使是算法也可能需要更改。
但是,如果您正在尋找Matlab的Python替代品,您肯定會找到NumPy的用途。 值得學習。
array.array
可以動態更改大小。 如果要從某些源收集數據,最好使用array.array
。 但是array.array
只是一個維度,並且沒有與它有關的計算函數。 因此,當您想對數據進行一些計算時,將其轉換為numpy.ndarray
,並使用numpy中的函數。
numpy.frombuffer
可以創建一個numpy.ndarray
與共享相同的數據緩沖array.array
對象,它的速度快,因為它不需要復制數據。
這是一個演示:
import numpy as np
import array
import random
a = array.array("d")
# a for loop that collects 10 channels data
for x in range(100):
a.extend([random.random() for _ in xrange(10)])
# create a ndarray that share the same data buffer with array a, and reshape it to 2D
na = np.frombuffer(a, dtype=float).reshape(-1, 10)
# call some numpy function to do the calculation
np.sum(na, axis=0)
使用NumPy數組而不是內置列表的另一個巨大優勢是NumPy有一個C API,允許本機C和C ++代碼直接訪問NumPy數組。 因此,許多用C語言等低級語言編寫的Python庫希望您使用NumPy數組而不是Python列表。
參考:用於數據分析的Python:與Pandas,NumPy和IPython進行數據爭奪
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.