NumPy 模組 常用方法 學習
阿新 • • 發佈:2019-01-08
import numpy as np
1. 多維陣列:型別 numpy.ndarray
方法:numpy.array(tuple[,dtype]): # tuple 可以是由 tuple 組成的;dtype 可以取 numpy.int32/.int16/.float64 對 tuple 的元素指定型別。 返回ndarray型別物件。>>> np.array([1.2,2,3,4],dtype = np.int32)
array([1, 2, 3, 4])
numpy.arange(num): # 返回一個 包含 0~num-1 num個元素的 int型一維陣列。ndarray.resharp(num1,num2): #將一維陣列分解成包含 num1 個一維陣列的二維陣列 ,每個部分包含 num2 個元素。其中num1*num2 === num(元素總數)。
numpy.linspace(n1,n2,i): #從 [n1,n2]中等距的找出 i 個數組成陣列</pre><pre name="code" class="python">>>> print np.arange(15).reshape(3,5) [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]
>>> print np.linspace(1,3,9)
[ 1. 1.25 1.5 1.75 2. 2.25 2.5 2.75 3. ]
numpy.zeros,numpy.ones,numpy.eye #等方法可以構造特定的矩陣>>> print np.zeros((3,4)) [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]] >>> >>> print np.ones((3,4)) [[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]] >>> >>> print np.eye(3) [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]]
建立一個三維陣列:
>>> print np.zeros((3,4,5))
[[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]]
print a.ndim #陣列的維數>>> a = np.zeros((3,4,5)) >>> a array([[[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]]])
>>> print a.ndim
3
print a.shape #陣列每一維的大小>>> print a.shape
(3L, 4L, 5L)
print a.size #陣列的元素數>>> print a.size
60
print a.dtype #元素型別>>> print a.dtype
float64
a.itemsize #每個元素所佔的位元組數>>> print a.itemsize
8
2.陣列索引,切片,賦值: #也可以使用C中的下標
>>> a = np.array( [[2,3,4],[5,6,7]] )
>>> print a
[[2 3 4]
[5 6 7]]
a[m,n]索引
>>> a[1][2]
7
>>> a[1,2]
7
a:b 表示[a+1,b]間的所有元素
>>> a[1,:]
array([5, 6, 7])
>>> a[1,]
array([5, 6, 7])
>>> a[1]
array([5, 6, 7])
>>> a[1][:]
array([5, 6, 7])
>>> a[1,1:2]
array([6])
>>> a[1][1:2]
array([6])
>>> a[1,:] = [8,9,10]
>>> a
array([[ 2, 3, 4],
[ 8, 9, 10]])
>>> a[1][:] = [1,1,1]
>>> a
array([[2, 3, 4],
[1, 1, 1]])
>>> a[1,:] = [8,9,10,11]
>>> a
ValueError: cannot copy sequence with size 4 to array axis with dimension 3
3.使用for操作元素:
>>> for x in a:
... print x
...
[2 3 4]
[1 1 1]
4.四則運算中位置對應的元素進行運算
#參與運算的矩陣必須有一樣的形式>>> a = np.ones((2,2))
>>> b = np.eye(2)
>>> print a
[[ 1. 1.]
[ 1. 1.]]
>>>
>>> print b
[[ 1. 0.]
[ 0. 1.]]
>>>
>>> print a > 2
[[False False]
[False False]]
>>>
>>> print a+b
[[ 2. 1.]
[ 1. 2.]]
>>>
>>> print a-b
[[ 0. 1.]
[ 1. 0.]]
>>>
>>> print b*2
[[ 2. 0.]
[ 0. 2.]]
>>>
>>> print (a*2)*(b*2)
[[ 4. 0.]
[ 0. 4.]]
>>>
>>> print b/(a*2)
[[ 0.5 0. ]
[ 0. 0.5]]
>>>
>>> print (a*2)**4
[[ 16. 16.]
[ 16. 16.]]
5.ndarray物件的方法:
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
>>> a.sum()
21
>>> a.sum(axis=0) #計算每一列的元素和
array([ 9, 12])
>>> a.sum(axis=1) #計算每一行的元素和
array([ 3, 7, 11])
>>> a.min()
1
>>> a.max()
6
6.numpy的方法:
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
>>> np.sin(a) #求sin(x)
array([[ 0.84147098, 0.90929743],
[ 0.14112001, -0.7568025 ],
[-0.95892427, -0.2794155 ]])
>>> np.sin(1/2)
0.0
>>> np.max(a)
6
>>> np.floor(a) #對每個元素向下取整
array([[ 1., 2.],
[ 3., 4.],
[ 5., 6.]])
>>> np.floor(3.7)
3.0
>>> np.exp(a) #求ln(x)
array([[ 2.71828183, 7.3890561 ],
[ 20.08553692, 54.59815003],
[ 148.4131591 , 403.42879349]])
>>> np.exp(0)
1.0
>>> np.dot(a,a.transpose()) #進行矩陣的乘法
array([[ 5, 11, 17],
[11, 25, 39],
[17, 39, 61]])
合併陣列
>>> a = np.ones((2,2))
>>> b = np.eye(2)
>>> a
array([[ 1., 1.],
[ 1., 1.]])
>>> b
array([[ 1., 0.],
[ 0., 1.]])
>>> np.vstack((a,b)).shape
(4L, 2L)
>>> np.hstack((a,b)).shape
(2L, 4L)
>>> np.vstack((a,b)) #將兩個等列的矩陣合併。
array([[ 1., 1.],
[ 1., 1.],
[ 1., 0.],
[ 0., 1.]])
>>> np.hstack((a,b)) #兩個等行的矩陣,將後一個的每一行接到第一個的後面。
array([[ 1., 1., 1., 0.],
[ 1., 1., 0., 1.]])
7.淺拷貝和深拷貝:
>>> c = np.hstack((a,b))
>>> c
array([[ 1., 1., 1., 0.],
[ 1., 1., 0., 1.]])
淺拷貝
>>> a[1,1] = 5
>>> b[1,1] = 5
>>> c
array([[ 1., 1., 1., 0.],
[ 1., 1., 0., 1.]])
>>> a = np.ones((2,2))
>>> b = a #為a建立新的引用b,b是a的別稱
>>> a
array([[ 1., 1.],
[ 1., 1.]])
>>> b
array([[ 1., 1.],
[ 1., 1.]])
>>> a is b
>>> True
深拷貝
>>> c = a.copy() #建立了新的物件c,對c的操作和a無關
>>> c
array([[ 1., 1.],
[ 1., 1.]])
>>> a is c
False
8.矩陣的運算:
轉置:>>> a = np.array([[1,0],[2,3]])
>>> a
array([[1, 0],
[2, 3]])
>>>
>>> a.transpose()
array([[1, 2],
[0, 3]])
跡:
>>> a = np.array([[1,2,3,4],[2,3,4,5]])
>>> a
array([[1, 2, 3, 4],
[2, 3, 4, 5]])
>>> a.trace()
4
9.numpy.linalg模組中有很多關於矩陣運算的方法:
import numpy.linalg as nplg
特徵值、特徵向量:
nplg.eig(a)
>>> for x in nplg.eig(a):
... print x
...
[ 3. 1.]
[[ 0. 0.70710678]
[ 1. -0.70710678]]
===================================================================================================================