NumPy:數組計算

轉載自:https://www.cnblogs.com/haiyan123/p/8377623.html

一、NumPy:數組計算

1、NumPy是高性能科學計算和數據分析的基礎包。它是pandas等其他各種工具的基礎。

2、NumPy的主要功能:

  • ndarray,一個多維數組結構,高效且節省空間
  • 無需循環對整組數據進行快速運算的數學函數
  • 讀寫磁盤數據的工具以及用於操作內存映射文件的工具
  • 線性代數、隨機數生成和傅里葉變換功能
  • 用於集成C、C++等代碼的工具

3、安裝方法:pip install numpy

4、引用方式:import numpy as np

二、NumPy:ndarray-多維數組對象

1、創建ndarray:np.array()

2、ndarray是多維數組結構,與列表的區別是:

  • 數組對象內的元素類型必須相同
  • 數組大小不可修改

3、常用屬性:

  • T 數組的轉置(對高維數組而言)
    在這裏插入圖片描述
  • dtype 數組元素的數據類型
  • size 數組元素的個數
  • ndim 數組的維數
  • shape 數組的維度大小(以元組形式)

4、常用方法

array.shape                         array的規格
array.ndim      
array.dtype                         array的數據規格
numpy.zeros(dim1,dim2)              創建dim1*dim2的零矩陣
numpy.arange
numpy.eye(n) /numpy.identity(n)     創建n*n單位矩陣
numpy.array([…data…], dtype=float64 )
array.astype(numpy.float64)         更換矩陣的數據形式
array.astype(float)                 更換矩陣的數據形式
array * array                       矩陣點乘
array[a:b]                          切片
array.copy()                        得到ndarray的副本,而不是視圖
array [a] [b]=array [ a, b ]        兩者等價
name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool)
data[True,False,..]                索引,只索取爲True的部分,去掉False部分
通過布爾型索引選取數組中的數據,將總是創建數據的副本。
data[ [4,3,0,6] ]                   索引,將第4,3,0,6行摘取出來,組成新數組
data[-1]=data[data.__len__()-1]
numpy.reshape(a,b)                  將a*b的一維數組排列爲a*b的形式
array([a,b,c,d],[d,e,f,g])          返回一維數組,分別爲[a,d],[b,e],[c,f],[d,g]
array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ]
array.T                             array的轉置
numpy.random.randn(a,b)             生成a*b的隨機數組
numpy.dot(matrix_1,matrix_2)        矩陣乘法
array.transpose( (1,0,2,etc.) )     對於高維數組,轉置需要一個由軸編號組成的元組

三、NumPy:ndarray-數據類型

  • ndarray數據類型:dtype:
  • 布爾型:bool_
  • 整型:int_ int8 int16 int32 int64
  • 無符號整型:uint8 uint16 uint32 uint64
  • 浮點型:float_ float16 float32 float64
  • 複數型:complex_ complex64 complex128

四、NumPy:ndarray-創建

創建ndarray:
    array()         將列表轉換爲數組,可選擇顯式指定dtype
    arange()        range的numpy版,支持浮點數
    linspace()      類似arange(),第三個參數爲數組長度
    zeros()         根據指定形狀和dtype創建全0數組
    ones()          根據指定形狀和dtype創建全1數組
    empty()         根據指定形狀和dtype創建空數組(隨機值)
    eye()           根據指定邊長和dtype創建單位矩陣
    diag()          創建對角矩陣

五、NumPy:索引和切片

1、數組和標量之間的運算
    a+1    a*3    1//a    a**0.5
2、同樣大小數組之間的運算
    a+b    a/b    a**b
3、數組的索引:
    一維數組:a[5]
    多維數組:
        列表式寫法:a[2][3]
        新式寫法:a[2,3] (推薦)
   數組的切片:
        一維數組:a[5:8]    a[4:]        a[2:10] = 1
        多維數組:a[1:2, 3:4]    a[:,3:5]        a[:,1]
4、強調:與列表不同,數組切片時並不會自動複製,在切片數組上的修改會影響原數組。    【解決方法:copy()

六、NumPy:布爾型索引

  • 問題:給一個數組,選出數組中所有大於5的數。
      答案:a[a>5]
      原理:
        a>5會對a中的每一個元素進行判斷,返回一個布爾數組
        布爾型索引:將同樣大小的布爾數組傳進索引,會返回一個由所有True對應位置的元素的數組

  • 問題2:給一個數組,選出數組中所有大於5的偶數。

  • 問題3:給一個數組,選出數組中所有大於5的數和偶數。
      答案:
         a[(a>5) & (a%20)]
         a[(a>5) | (a%2
    0)]

    import numpy as np
    a = np.array([1,2,3,4,5,4,7,8,9,10])
    a[a>5&(a%2==0)]  #注意加括號,不加括號錯誤,如下
    輸出:array([ 1,  2,  3,  4,  5,  4,  7,  8,  9, 10])
    a[(a>5)&(a%2==0)]
    輸出:array([ 8, 10])

七、NumPy:花式索引*

  • 問題1:對於一個數組,選出其第1,3,4,6,7個元素,組成新的二維數組。
    答案:a[[1,3,4,6,7]]
  • 問題2:對一個二維數組,選出其第一列和第三列,組成新的二維數組。
    答案:a[:,[1,3]]

八、NumPy:通用函數’

通用函數:能同時對數組中所有元素進行運算的函數
常見通用函數:
一元函數:abs, sqrt, exp, log, ceil, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan

numpy.sqrt(array)                   平方根函數   
numpy.exp(array)                    e^array[i]的數組
numpy.abs/fabs(array)               計算絕對值
numpy.square(array)                 計算各元素的平方 等於array**2
numpy.log/log10/log2(array)         計算各元素的各種對數
numpy.sign(array)                   計算各元素正負號
numpy.isnan(array)                  計算各元素是否爲NaN
numpy.isinf(array)                  計算各元素是否爲NaN
numpy.cos/cosh/sin/sinh/tan/tanh(array) 三角函數
numpy.modf(array)                   將array中值得整數和小數分離,作兩個數組返回
numpy.ceil(array)                   向上取整,也就是取比這個數大的整數 
numpy.floor(array)                  向下取整,也就是取比這個數小的整數
numpy.rint(array)                   四捨五入
numpy.trunc(array)0取整 
numpy.cos(array)                       正弦值
numpy.sin(array)                    餘弦值 
numpy.tan(array)                    正切值 

二元函數:add, substract, multiply, divide, power, mod, maximum, mininum,

numpy.add(array1,array2)            元素級加法
numpy.subtract(array1,array2)       元素級減法
numpy.multiply(array1,array2)       元素級乘法
numpy.divide(array1,array2)         元素級除法 array1./array2
numpy.power(array1,array2)          元素級指數 array1.^array2
numpy.maximum/minimum(array1,aray2) 元素級最大值
numpy.fmax/fmin(array1,array2)      元素級最大值,忽略NaN
numpy.mod(array1,array2)            元素級求模
numpy.copysign(array1,array2)       將第二個數組中值得符號複製給第一個數組中值
numpy.greater/greater_equal/less/less_equal/equal/not_equal (array1,array2)
元素級比較運算,產生布爾數組
numpy.logical_end/logical_or/logic_xor(array1,array2)元素級的真值邏輯運算

九、補充知識:浮點數特殊值

1、浮點數:float
2、浮點數有兩個特殊值:

nan(Not a Number):不等於任何浮點數(nan != nan)
inf(infinity):比任何浮點數都大
在數據分析中,nan常被表示爲數據缺失值
3、NumPy中創建特殊值:np.nan np.inf
4、在數據分析中,nan常被用作表示數據缺失值
既然nan連自己都不相等,那麼怎麼判斷是不是NAN呢?
用a==a 只要返回False就能判斷

十、NumPy:數學和統計方法

常用函數:

sum	求和
cumsum 求前綴和
mean	求平均數
std	求標準差
var	求方差
min	求最小值
max	求最大值
argmin	求最小值索引
argmax	求最大值索引

十一、NumPy:隨機數生成

隨機數生成函數在np.random子包內
常用函數

rand	給定形狀產生隨機數組(01之間的數)
randint	給定形狀產生隨機整數
choice	給定形狀產生隨機選擇
shuffle	與random.shuffle相同
uniform	給定形狀產生隨機數組
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章