轉自:http://blog.csdn.net/Jerr__y/article/details/54968548
numpy提供了ndarray和matrix兩種類型的數據,爲我們進行科學運算提供了非常便捷的運算工具。相對來說,我覺得其實還是MATLAB對於矩陣運算的支持更加直觀易操作,但是作爲Python使用者,怎能不把numpy用熟用透呢。
在numpy中,同樣一種操作可能提供了很多種不同的方式,具體怎麼來實現完全是使用者個人習慣。對於和我一樣的菜鳥,我覺得最好是從一開始就養成較好的操作習慣。
numpy的二維數組能夠很好地實現矩陣的各種功能,而且比matrix要靈活,速度也更快(refer:numpy教程:矩陣matrix及其運算)。因此,在二者通用的情況下,我選擇使用array來實現。
下面的內容主要是學習了numpy的教程之後,結合我自己在平時的使用中可能經常遇到的一些操作問題做一下總結,方便自己記住。一些比較少用的操作就先不管了,就算忘了再去查就好了。
numpy官方教程: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
numpy官方教程中文翻譯: NumPy的詳細教程
1. 創建數組和數組變形
import numpy as np
- 1
# 創建數組 a = np.array([1,2,3,4,5,6]) print a # 直接給a.shape賦值是最簡單的變形方式 a.shape = (2,3) print '變形之後:' print a
- 1
- 2
- 3
- 4
- 5
- 6
- 7
[1 2 3 4 5 6] [[1 2 3] [4 5 6]]
- 1
- 2
- 3
- 4
a.ravel() # 拉直數組
- 1
array([1, 2, 3, 4, 5, 6])
2.數組拼接
A = np.floor(np.random.randn(2,3) * 10) print 'A:\n', A B = np.floor(np.random.randn(2,3) * 10) print 'B:\n', B
- 1
- 2
- 3
- 4
A: [[ -2. 3. -10.] [ 5. 4. 7.]] B: [[-14. -7. 3.] [ 10. 6. -8.]]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
# 按第一個軸拼接 print '按行拼接:' print np.vstack([A,B]) # 按第二個軸拼接 print '按列拼接:' print np.hstack([A,B])
- 1
- 2
- 3
- 4
- 5
- 6
按行拼接: [[ -2. 3. -10.] [ 5. 4. 7.] [-14. -7. 3.] [ 10. 6. -8.]] 按列拼接: [[ -2. 3. -10. -14. -7. 3.] [ 5. 4. 7. 10. 6. -8.]]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3. 基本操作和基本運算
np.exp(2)
- 1
7.3890560989306504
- 1
- 2
np.exp2(2)
- 1
4.0
- 1
- 2
np.sqrt(4)
- 1
2.0
- 1
- 2
np.sin([2,3])
- 1
array([ 0.90929743, 0.14112001])
- 1
- 2
np.log(2)
- 1
0.69314718055994529
- 1
- 2
np.log10(2)
- 1
0.3010299956639812
- 1
- 2
np.log2(2)
- 1
1.0
- 1
- 2
np.max([1,2,3,4])
- 1
4
- 1
- 2
4.二維數組完成矩陣操作
A = np.array([[1, 2], [-1, 4]]) B = np.array([[2, 0], [3, 4]]) print '對應元素相乘:' print A * B print '矩陣乘法:' print np.dot(A, B) # 或者 A.dot(B)
- 1
- 2
- 3
- 4
- 5
- 6
對應元素想乘: [[ 2 0] [-3 16]] 矩陣乘法 [[ 8 8] [10 16]]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
# 線性代數 from numpy import linalg
- 1
- 2
# 求A的轉置 print 'A的轉置:' print A.transpose() # 求A的逆矩陣 print 'A的逆矩陣:' print linalg.inv(A) # 特徵值和特徵向量 eigenvalues, eigenvectors = linalg.eig(A) print 'A 的特徵值:' print eigenvalues # 特徵值 print 'A 的特徵向量:' print eigenvectors # 特徵向量
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
A的轉置: [[ 1 -1] [ 2 4]] A的逆矩陣: [[ 0.66666667 -0.33333333] [ 0.16666667 0.16666667]] A 的特徵值: [ 2. 3.] A 的特徵向量: [[-0.89442719 -0.70710678] [-0.4472136 -0.70710678]]