Python數據分析之Numpy學習 2 —— NumPy 基礎學習
NumPy(Numerical Python)是高性能科學計算和數據分析的基礎包。NumPy的主要對象是同構數據多維容器(homogeneous multidimensional array)——ndarray,也就是說每一個ndarray都是一個相同類型元素組成的表格(二維)。在NumPy中維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。軸這個概念必須牢記,否則放棄吧。首先軸是從0開始計的,0代表最高維,次高維是1,以此類推。
約定:
import numpy as np
ndarray對象的常用屬性
創建ndarray
函數說明
np.array(data,dtype=None, order=None)
將數據data(列表、元組、數組或其他序列類型)轉換為ndarray。要麼推斷出dtype,要麼顯示指定dtype。默認直接複製數據。order默認是A(可能是C可能是F還可能是其它)
np.asarray(data, dtype=None, order=None)
將輸入數據轉換為ndarray,data同上還可以是ndarray,如果是ndarray就不進行複製。dtype同上,order是重塑中行優先C還是列優先F,默認C語言風格。
np.arange(10,30,5,dtype=None)
開始,結束,步長和內置的range相同
np.ones( (2,3,4), dtype=None) 、np.ones_like(a)
根據指定的形狀和dtype創建一個全1的數組。ones_like以另一個數組為參數,創建形狀和dtype相同的全1數組。
np.zeros() 、np.zeros_like()
全0數組,類似ones和ones_like。
np.empty() 、np.empty_like()
創建數組,只分配內存空間但不填充任何值,所以返回的是垃圾值。類似ones和ones_like。
np.eye(N, M=None, k=0, dtype=) 、np.identity(n, dtype=None)
eye創建的是N*M的數組,默認M=N,k取整數,正數對角線向上移k,負數對角線向下移k。identity創建一個N*N單位矩陣(對角線為1,其餘全0)的數組
示例 array
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
import numpy as npa = np.array([1,2,3]) print a
輸出如下:
[1, 2, 3]
# 多於一個維度 import numpy as npa = np.array([[1, 2], [3, 4]]) print a
輸出如下:
[[1, 2][3, 4]]
# dtype 參數 import numpy as npa = np.array([1, 2, 3], dtype = complex) print a
輸出如下:
[ 1.+0.j, 2.+0.j, 3.+0.j]
索引,切片和迭代
一維數組可以被索引、切片和迭代,就像列表和其它Python序列。
>>> a = arange(10)**3>>> aarray([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])>>> a[2]8>>> a[2:5]array([ 8, 27, 64])>>> a[:6:2] = -1000 # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000>>> aarray([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729])>>> a[ : :-1] # reversed aarray([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000])>>> for i in a:... print i**(1/3.),...nan 1.0 nan 3.0 nan 5.0 6.0 7.0 8.0 9.0
多維數組可以每個軸有一個索引。這些索引由一個逗號分隔的元組給出。
>>> def f(x,y):... return 10*x+y...>>> b = fromfunction(f,(5,4),dtype=int)>>> barray([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])>>> b[2,3]23>>> b[0:5, 1] # each row in the second column of barray([ 1, 11, 21, 31, 41])>>> b[ : ,1] # equivalent to the previous examplearray([ 1, 11, 21, 31, 41])>>> b[1:3, : ] # each column in the second and third row of barray([[10, 11, 12, 13], [20, 21, 22, 23]])
組合(stack)不同的數組
幾種方法可以沿不同軸將數組堆疊在一起:
>>> a = floor(10*random.random((2,2)))>>> aarray([[ 1., 1.], [ 5., 8.]])>>> b = floor(10*random.random((2,2)))>>> barray([[ 3., 3.], [ 6., 0.]])>>> vstack((a,b))array([[ 1., 1.], [ 5., 8.], [ 3., 3.], [ 6., 0.]])>>> hstack((a,b))array([[ 1., 1., 3., 3.], [ 5., 8., 6., 0.]])
函數
column_stack
以列將一維數組合成二維數組,它等同與
vstack
對一維數組。
>>> column_stack((a,b)) # With 2D arraysarray([[ 1., 1., 3., 3.], [ 5., 8., 6., 0.]])>>> a=array([4.,2.])>>> b=array([2.,8.])>>> a[:,newaxis] # This allows to have a 2D columns vectorarray([[ 4.], [ 2.]])>>> column_stack((a[:,newaxis],b[:,newaxis]))array([[ 4., 2.], [ 2., 8.]])>>> vstack((a[:,newaxis],b[:,newaxis])) # The behavior of vstack is differentarray([[ 4.], [ 2.], [ 2.], [ 8.]])
row_stack
函數,另一方面,將一維數組以行組合成二維數組。
對那些維度比二維更高的數組,
hstack
沿著第二個軸組合,
vstack
沿著第一個軸組合,
concatenate
允許可選參數給出組合時沿著的軸。
函數和方法(method)總覽
這是個NumPy函數和方法分類排列目錄。這些名字連結到NumPy示例,你可以看到這些函數起作用。[^5]
創建數組
arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r , zeros, zeros_like
轉化
astype, atleast 1d, atleast 2d, atleast 3d, mat
操作
array split, column stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack
詢問
all, any, nonzero, where
排序
argmax, argmin, argsort, max, min, ptp, searchsorted, sort
運算
choose, compress, cumprod, cumsum, inner, fill, imag, prod, put, putmask, real, sum
基本統計
cov, mean, std, var
基本線性代數
cross, dot, outer, svd, vdot