利用數組進行數據處理

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])
相關文章
相關標籤/搜索