最近在自學numpy,從網上找了視頻來看,感覺numpy的指令很多,怕記不清所以統一貼出來方便查閱。
import numpy as np
導入numpy模塊,一般簡寫為np
array = np.array([[1,2,3],[2,3,4]])
numpy的屬性
print(array) 打印出數組
print("number of dim:",array.ndim)
判斷數組是幾維的(一維二維等等)
print("shape:",array.shape)
判斷數組的形狀
print("size:"array.size
)判斷數組的大小
numpy的創建array
array = np.array([[1,2,3],[2,3,4]]
簡單創建(注意下打印出來之后沒有中間,號)
array = np.array([[1,2,3],dtype=np.int)
print(array.dtype)
dtype設定數組中的格式,一般有int,float等等,默認的是64位的,如果要32位的改成int32,通常來說位數越小占用空間越小,一般保留64位
a = np.zeros((5))
a = np.nes((5))
a = np.empty(([3,4]))
常見的全0全1全空數組
a=np.arange(10,20,2).reshape((3,4))
生成從10到20步長為2的整數數組(不包括20,10位置默認為0),並重新變為3行4列的數組格式
a = np.linespace(1,10,20)
生成線段,20是生成線段的份數
numpy基礎運算
a=np.array([10,20,30,40])
b=np.arange(4)
生成從0到3的數組
常規的加減乘除,即+-*/都是對應位直接做計算得到結果,當運用單一矩陣乘方的時候遵循Python的規則用**,三角函數需要調用,例如c=np.sin(a).判斷可以直接把條件加到括號里,如print(b<3)。二維的矩陣乘法運算(從線性代數角度來說)如下:
c_dot=np.dot(a,b)
或者
c_dot_2=a.dot(b)
隨機生成一個array,每個元素都是0到1之間的隨機數,需要制定形狀:
a = np.random.random((2,4))
np.sum(a,axis=1)
求和,axis=1是對每一列中找,axis=0是對每一行中找,會針對每一行(列)中分別查找計算
np.min(a)
求最小值
np.max(a)
求最大值
np.argmin(a)
求最小值的索引
np.argmax(a)
求最大值的索引
np.mean(a)
求平均值
np.median(a)
求中位數
np.cumsum(a)
是一個累加的過程,逐步的加進去,顯示出累加的每一步
np.diff(a)
累差,就是每個元素和之前的差
np.nonzero(a
)找出非0的數並將它們的索引列出來
np.sort(a)
排序
np,transpose(a)
矩陣反向,行列互換並且倒序
np.clip(a,3,5)
截取,a中所有小於3的讓他為3,大於5的讓他為5,中間的不變
numpy的索引
A=np.arange(3,15).reshape((3,4))
print(A[3])類似於python,對一維來說是直接訪問對應索引,對二維來說單索引訪問的是對應的行,雙索引才是對應的單個元素如,print(A[2][1])
和print(A[2,1])
是一樣的,print(A[2,:])
代表第二行的所有數,print(A[1,1:3])
第二行從1到3的數即8和9
for循環:
for row in A:
print(row)
迭代行
for column in A.T
(就是前面的transpose):
print(column)
迭代列
A.flatten()
變平
a.ravel() # returns the array, flattened
for item in A.flat:
print(item)
迭代項目,flat是上面的迭代器
numpy array合並
A = np.array([1,1,1])
B = np.array([2.2.2])
C = print(np.vstack((A,B)))
vertical stack上下的合並
D = print(np.hstack((A,B)))
horizontal stack 左右的合並
!--print(A[np.newaxis,:])
--給A加了一個維度。?
E = np.concatenate((A,B,B),axis=0)
多個array的合並,axis=0在上下維度進行合並
numpy array分割
A = np.arange(12).reshape((3,4))
print(np.spilt(A,2,axis=1))
將A縱向平均分成2份(注意spilt中列數必須能被2整除),axis=0是橫向分割
print(np.array_spilt(A,2,axis=1))``不等量分割
print(np.vspilt(A,3))
print(np.vspilt(A,3))
同上面的合並
numpy array的復制和深度復制(copy&deep copy)
視頻里講的很簡略,所以這邊把官方文檔轉過來。
有三種情況:
#完全不復制
簡單賦值不會創建數組對象或其數據的拷貝。
>>> a = np.arange(12)
>>> b = a # no new object is created
>>> b is a # a and b are two names for the same ndarray object
True
>>> b.shape = 3,4 # changes the shape of a
>>> a.shape
(3, 4)
Python將可變對象作為引用傳遞,所以函數調用不會復制。
>>> def f(x):
... print(id(x))
...
>>> id(a) # id is a unique identifier of an object
148293216
>>> f(a)
148293216
#視圖或淺復制
不同的數組對象可以共享相同的數據。 view
方法創建一個新的數組對象,它查看相同的數據。
>>> c = a.view()
>>> c is a
False
>>> c.base is a # c is a view of the data owned by a
True
>>> c.flags.owndata
False
>>>
>>> c.shape = 2,6 # a's shape doesn't change
>>> a.shape
(3, 4)
>>> c[0,4] = 1234 # a's data changes
>>> a
array([[ 0, 1, 2, 3],
[1234, 5, 6, 7],
[ 8, 9, 10, 11]])
對數組切片返回一個視圖:
>>> s = a[ : , 1:3] # spaces added for clarity; could also be written "s = a[:,1:3]"
>>> s[:] = 10 # s[:] is a view of s. Note the difference between s=10 and s[:]=10
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
深拷貝
copy
方法生成數組及其數據的完整拷貝。
>>> d = a.copy() # a new array object with new data is created
>>> d is a
False
>>> d.base is a # d doesn't share anything with a
False
>>> d[0,0] = 9999
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
#函數和方法概述
這里列出了一些根據類別排列的有用的NumPy函數和方法名稱。完整列表見Routines。
-
數組創建
arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros, zeros_like
-
轉換
ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat
-
手法
array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.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, ndarray.fill, imag, prod, put, putmask, real, sum
-
基本統計
cov, mean, std, var
-
基本線性代數
cross, dot, outer, linalg.svd, vdot