Part 1html
numpy數組使你能夠將許多數據處理任務表述爲間接的數組表達式(不然須要編寫循環)。用數組表達式代替循環的作法,一般被稱爲矢量化。通常來講,矢量化數組運算要比等價的純python方式要快上一兩個數量級(甚至更多),尤爲是各類數值計算。python
import numpy as np points = np.arange(-5,5,0.01)
x,y = np.meshgrid(points,points)
y
array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ], [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99], [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98], ..., [ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97], [ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98], [ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])
import matplotlib.pyplot as plt
z = np.sqrt(x**2+y**2)
z
array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985, 7.06400028], [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568], [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], ..., [7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603, 7.04279774], [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568]])
plt.title('Image plot of $\sqrt{x^2+y^2}$ for a grid of values') plt.imshow(z,cmap=plt.cm.gray);plt.colorbar()
Part 2數組
將條件邏輯表述爲數組運算spa
numpy.where 是三元表達式的矢量化版本。 code
官方文檔:https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html htm
In [1]: import numpy as np In [2]: xarr = np.array([1.1,1.2,1.3]) In [3]: yarr = np.array([2.1,2.2,2.3]) In [4]: cond = np.array([True,False,True]) In [5]: result = np.where(cond,xarr,yarr) In [6]: result Out[6]: array([1.1, 2.2, 1.3])
np.where的第二個和第三個參數沒必要是數組。它們均可以是標量值。在數據分析工做中,where一般用於根據另外一個數組而產生一個新的數組。blog
假設有一個由隨機數據組成的矩陣。你但願將全部正值替換爲2,將全部負值替換爲-2。利用np.where,則會很是簡單。ip
arr = randn(4,4)
arr
array([[-3.54522971, 1.68063071, 1.1204201 , 1.13209986], [ 0.40560108, -0.25336595, 0.32044861, -1.39082664], [ 0.2424607 , 1.24353322, -2.02133435, -0.60433901], [-0.82997538, 1.00716739, 0.37567233, 0.90534339]])
numpy.where(arr>0,2,-2)
array([[-2, 2, 2, 2], [ 2, -2, 2, -2], [ 2, 2, -2, -2], [-2, 2, 2, 2]])
Part 3ci
惟一化以及其它的集合邏輯文檔
unique(x) 計算x中的惟一元素,並返回有序結果
In [1]: import numpy as np In [2]: np.unique(np.array([1,3,4,3])) Out[2]: array([1, 3, 4])
intersect1d(x,y) 計算 x 和 y 中的公共元素,並返回有序結果
In [4]: np.intersect1d(np.array([1,2,3]),np.array([2,3,4])) Out[4]: array([2, 3])
union1d(x,y)
In [5]: np.union1d(np.array([1,2,3]),np.array([2,3,4])) Out[5]: array([1, 2, 3, 4])
in1d(x,y) 獲得一個表示 x 的元素是否包含於 y 的布爾型數組
In [6]: np.in1d(np.array([1,2,3]),np.array([2,3,4])) Out[6]: array([False, True, True])
setdiff1d(x,y) 集合的差,即元素在 x 中且再也不 y 中
In [7]: np.setdiff1d(np.array([1,2,3]),np.array([2,3,4])) Out[7]: array([1])
setxor1d(x,y) 集合的對稱差,即存在於一個數組中,但不一樣時存在於兩個數組中的元素。簡單來講,就是「異或」
In [8]: np.setxor1d(np.array([1,2,3]),np.array([2,3,4])) Out[8]: array([1, 4])