numpy 數組的初步練習

numpy 數組的初步練習

來自專欄數據分析師學習之路2 人贊了文章

學而思之,思而練之


import numpy as npimport pandas as pd#產生數組的幾種方法#1.通過傳入列表元素來構造np.array()num_list=[5,7,8,9]num_array = np.array(num_list)print(num_array)num_array.dtype#查看數據類型num_2d_list=np.array([[1,2,3],[4,5,6]])#傳入二維數組,注意這個[]方括弧將裡面的內容都括弧起來print(num_2d_list)print(num_2d_list.shape)#表示此數組是一個兩行三列的數組[5 7 8 9][[1 2 3] [4 5 6]](2, 3)

但是要注意,傳入numpy的列表中的元素必須是同一類型(數值型),否則會將原有的數值類型都默認的隱式轉換為字元類型

mixed_list=[3,a,5,8]mixed_array = np.array(mixed_list)print(mixed_array)print(mixed_array.dtype)[3 a 5 8]<U11#2.第二種方法為np.random.rand(shape),將產生相應維度的隨機數據,數據符合正態分布random_array = np.random.rand(1,5)random_arrayrandom_2d_array = np.random.rand(2,5)print(random_2d_array.dtype)print(random_2d_array)float64[[0.03995358 0.55213496 0.82289924 0.31016646 0.64938851] [0.0888845 0.07834194 0.50329698 0.07233213 0.80334427]]#3.第三種方法為np.zeros,np.ones 此時只需要傳入一個表示數組維度的元祖即可,其數據全都由0或1填充#np.empty()創建一個沒有任何值的數組zero_array = np.zeros((2,3))ones_array = np.ones((4,4))empty_array = np.empty((3,3))print(zero_array)print(zero_array.shape)print(ones_array)print(ones_array.shape)print(empty_array)[[0. 0. 0.] [0. 0. 0.]](2, 3)[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]](4, 4)[[0.00000000e+000 0.00000000e+000 0.00000000e+000] [0.00000000e+000 0.00000000e+000 5.53353523e-321] [6.43583072e+257 9.07680888e+223 9.82135655e+242]]#第四種方法 np.arrange(start,end,step) 注意這個是左閉右開的數字區間arange_array = np.arange(1,10,2)arange_arrayarray([1, 3, 5, 7, 9])

接下來是關於數組數據類型的查看,修改的討論

print(arange_array.dtype)arange_array = arange_array.astype(np.float64)#使用array.astype(np.float64(數據類型)) 來修改,# 調用astype無論如何都會創建出一個新的數組(原始數據的一份拷貝)print(arange_array)#創建時利用dtype=np.float64(數據類型指定)point_array = np.arange(10,dtype=np.float64)print(point_array)float64[1. 3. 5. 7. 9.][0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

數組的查看和切片如下,數組的切片是源數據的視圖,意味著任何對切片視圖的修改都會直接反映到整個源數據的選區

for i in range(len(num_array)):#利用index 位置索引進行切片 print(num_array[i])for i in num_array: #直接嗲用 print(i)#num_list選區值修改print(原來的num_array{}.format(num_array))num_array[2:]=10print(修改後的num_array{}.format(num_array))57895789原來的num_array[5 7 8 9]修改後的num_array[ 5 7 10 10]

數組和列表的區別在於數組可以進行方便的矢量化運算,標量運算,以及統計計算的方便性,並且有些快速的通用函數

num_array_2 =np.array([2,3,4,5])print(num_array+num_array_2)#相同shape數組相加,會是對應位置的元素相加print(num_array/2)#除以一個標量,則會將數組中的每個元素都除以這個標量print(num_array.mean())#可以直接使用numpy.array.mean(axis=0) 默認為axis=0方向,也可以修改為axis=1方向num_2d_array = np.array([[1,2,3],[4,6,8]])print(num_2d_array.mean(0))#shape 1×3print(num_2d_array.mean(1))#shape 2×1print(num_2d_array.cumsum(0))#垂直方向上的數字累加結果print(num_2d_array.cumsum(1))#水平方向上的數字累加結果print(np.sqrt(num_array_2))#將數組中的每個元素都進行開方運算print(np.exp(num_array_2))#將數組中的每個元素都進行求指數運算[ 7 10 14 15][2.5 3.5 5. 5. ]8.0[2.5 4. 5.5][2. 6.][[ 1 2 3] [ 5 8 11]][[ 1 3 6] [ 4 10 18]][1.41421356 1.73205081 2. 2.23606798][ 7.3890561 20.08553692 54.59815003 148.4131591 ]

通過邏輯判斷符號來生成布爾值,用布爾值進行數據的篩選,且在數組中且和或用& |,python 正常的and 和 or沒有用

name =np.array([小明,小紅,小黃])name_income=np.array([100,200,300])is_xiaoming=name == 小明#會將數組中的每個元素進行判斷,返回一個布爾型數組print(小明的收入是{}.format(name_income[is_xiaoming]))#只取對應ture位置的元素is_both = (name==小明)|(name==小紅) #要分開兩個寫,若寫成 is_both=(name==小明& name==小紅)會報錯print(小明和小紅的收入分別為{}.format(name_income[is_both]))小明的收入是[100]小明和小紅的收入分別為[100 200]

numpy.where(條件,true的操作,false的操作)可以實現快速的多項操作

random_array = np.arange(-2,10,1).reshape(3,4)print(random_array)result = np.where(random_array>0,100,random_array)#只將大於0的部分變成100,其餘部分保持不變print(result)[[-2 -1 0 1] [ 2 3 4 5] [ 6 7 8 9]][[ -2 -1 0 100] [100 100 100 100] [100 100 100 100]]

數組也能對成員資質進行重複判斷,是否存在的判斷,any()和all()的運用

names=np.array([Bob,Joe,Will,Bob,Will,Joe,Joe])print(np.unique(names))#np.unique()返回唯一值的列表,相當於setnames_detail =np.array([John,Joe,Will])print(np.in1d(names_detail,names))#判斷names_detail中的每個元素是否在names這個列表中print(np.in1d(names_detail,names).any())#只要布爾值列表中的元素有True 則為Trueprint(np.in1d(names_detail,names).all())#只有布爾值列表中的元素全為True,才為True[Bob Joe Will][False True True]TrueFalse

推薦閱讀:

數學史話之夭折的天才阿貝爾和伽羅瓦
四年級下冊數學應用題練習 學號 姓名
梅花易數學習總結四:數字起卦法、時間起卦法(原創)
火花科學館 | <音頻> 周期現象要這麼給孩子講
誰做的動態圖?太牛了!數學原來這麼簡單易懂啊!

TAG:numpy | Python | 數學 |