簡體   English   中英

是什么原因使用ndarray而不是python數組

[英]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數組比Python列表需要更少的空間。 因此,您可以在NumPy數組(內存中)處理比使用Python列表更多的數據。
  • NumPy數組擁有龐大的Python列表或Python數組不可用的函數和方法庫。

是的,您不能簡單地將列表轉換為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.

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