要點
NumPy之于數值計算特別重要的原因之一钞速,是因為它可以高效處理大數組的數據。
NumPy是在一個連續(xù)的內存塊中存儲數據琴锭,獨立于其他Python內置對象欲芹。NumPy的C語言編寫的算法庫可以操作內存,而不必進行類型檢查或其它前期工作昔瞧。比起Python的內置序列指蚁, NumPy數組使用的內存更少。
NumPy可以在整個數組上執(zhí)行復雜的計算自晰,而不需要Python的for循環(huán)凝化。
性能對比
基于NumPy的算法要比純Python快10到100倍(甚至更快),并且使用的內存更少酬荞。
import numpy as np
%timeit my_arr = np.arange(1000000)
%timeit my_list = list(range(1000000))
ndarray
NumPy的ndarray:一種多維數組對象搓劫。
NumPy重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器混巧。你可以利用這種數組對整塊數據執(zhí)行一些數學運算枪向,其語法跟標量元素之間的運算一樣。
import numpy as np
data = np.random.randn(2, 3)
ndarray是一個通用的同構數據多維容器咧党,所有元素必須是相同類型的
# 取維度大小
data.shape
# 取數據數據類型
data.dtype
創(chuàng)建ndarray(強轉列表)
data1 = [5,8.4,9,233]
arr = np.array(data1)
嵌套序列(比如由一組等長列表組成的列表)將會被轉換為一個多維數組嵌套序列(比如由一組等長列表組成的列表)將會被轉換為一個多維數組
data2 = [[1,2,3,4],[5,6,7,8]]
arr1 = np.array(data2)
# 取維度
arr1.ndim
arr1.shape
arr1.dtype
zeros和ones分別可以創(chuàng)建指定長度或形狀的全0或全1數組秘蛔。empty可以創(chuàng)建一個沒有任何具體值的數組。np.empty返回的都是一些未初始化的垃圾值。
np.zeros(10)
np.ones((3,6))
np.empty((2,3,2))
np.arange(15)
函數 | 說明 |
---|---|
array | 將輸入數據(列表深员、元組负蠕、數組或其它序列類型)轉換為ndarry。推斷除dtype或特別指定dtype倦畅。默認直接賦值輸入數據 |
asarry | 將輸入轉化為ndarray,如果輸入本身是一個ndarray就不在復制 |
arange | 類似于內置的range遮糖,但返回的是一個ndarray而非list |
ones,ones_like | 根據指定的形狀和dtype創(chuàng)建一個全一數組滔迈。ones_like以另一個數組為參數止吁,并根據其形狀和dtype創(chuàng)建一個全一數組 |
zeros,zeros_like | 類似于ones和ones_like,只不過產生的是全0數組而已 |
empty燎悍,empty_like | 創(chuàng)建新數組敬惦,只分配內存空間但不填充任何值 |
full,full_like | 用full value中的所有值谈山,根據指定的形狀和dtype創(chuàng)建一個數組俄删。full_like使用另一個數組,用相同的形狀和dtype創(chuàng)建 |
eye,identity | 創(chuàng)建一個正方的N*N單位矩陣(對角線為一奏路,其余為零) |