1. 程式人生 > >NumPy 模組 常用方法 學習

NumPy 模組 常用方法 學習

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(元素總數)。
</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]]
      numpy.linspace(n1,n2,i): #從 [n1,n2]中等距的找出 i 個數組成陣列
>>> 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.]]]
>>> 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   #陣列的維數
>>> 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]]


===================================================================================================================