清晰易懂的Numpy進階教程

2021-01-10 機器學習算法那些事

推薦閱讀:清晰易懂的Numpy入門教程

Numpy是數據分析和科學計算的核心包,上文詳細介紹了Numpy的入門教程,本文將詳細介紹Numpy的高級特性,這些特性對於數據分析和處理非常重要。

來源:Machine Learning Plus翻譯:石頭

目錄

1. 如何獲取滿足條設定件的索引

2. 如何將數據導入和導出csv文件

3. 如何保存和加載numpy對象

4. 如何按列或行拼接numpy數組

5. 如何按列對numpy數組進行排序

6. 如何用numpy處理日期

7.高階numpy函數介紹

8. 小結

1. 如何獲取滿足條設定件的索引

上一文介紹根據數組是否滿足條件,輸出為True或False.

# 定義數組importnumpyasnparr_rand=np.array([8,8,3,7,7,0,4,2,5,2])#根據數組是否大於4,滿足為True,不滿足為Falseb=arr_rand>4b#> array([ True, True, False, True, True, False, False, False, True,False])若我們想得到滿足條件的索引,用np.where函數實現.

# 定位數組大於5的索引index_gt5=np.where(arr_rand>5)print("Positions where value > 5: ",index_gt5)#> Positions where value > 5: (array([0, 1, 3, 4]),) # 索引由索引得到滿足條件的值.

# 根據索引得到滿足條件的數組值arr_rand.take(index_gt5)#> array([[8, 8, 7, 7]])np.where也可以接受另兩個可選擇的參數x和y。當條件滿足時,輸出x,反之輸出y.

# 如果值大於5,輸出字符串'gt5',反之輸出'le5'np.where(arr_rand>5,'gt5','le5')#> array(['gt5', 'gt5', 'le5', 'gt5', 'gt5', 'le5', 'le5', 'le5', 'le5', 'le5'],dtype='<U3')np.argmax和np.argmin分別獲取數組最大值和最小值的索引.

# 最大值索引print('Position of max value: ',np.argmax(arr_rand))# 最小值索引print('Position of min value: ',np.argmin(arr_rand))#> Position of max value: 0#> Position of min value: 5np.max和np.min分別獲取數組的最大值和最小值.

# 最大值print('max value: ',np.max(arr_rand))# 最小值print('min value: ',np.min(arr_rand))#> max value: 8#> min value: 0

2. 如何將數據導入和導出csv文件

導入數據的標準方法是使用np.genfromtxt函數,它可以從web URLs導入數據,處理缺失值,多種分隔符,處理不規則的列數等功能。一個不太通用的版本是用np.loadtxt函數導入數據,它假設數據集無缺失值.

作為示例,我們嘗試從下面的URL讀取.csv文件,由於numpy數組的所有元素都應該是同一種類型,因此文本的最後一列默認為'nan'。通過設置參數'filling_values',你可以用其他值代替缺失值.

# 關閉數字的科學表示方法np.set_printoptions(suppress=True)# 從url的csv文件導入數據path='https://raw.githubusercontent.com/selva86/datasets/master/Auto.csv'# delimiter:分隔符,skip_header:從多少行開始讀數據,以0開始,filling_values:缺失值表示,dtype:數據類型data=np.genfromtxt(path,delimiter=',',skip_header=1,filling_values=-999,dtype='float')data[:3]# 顯示前3行數據#> array([[ 18. , 8. , 307. , 130. , 3504. , 12. , 70. ,#> 1. , -999. ],#> [ 15. , 8. , 350. , 165. , 3693. , 11.5, 70. ,#> 1. , -999. ],#> [ 18. , 8. , 318. , 150. , 3436. , 11. , 70. ,#> 1. , -999. ]])若設置參數dtype為'object'或'None',np.genfromtxt在未設置佔位符的前提下能同時處理具有數字和文本列的數據集.

# data2 = np.genfromtxt(path, delimiter=',', skip_header=1, dtype='object')data2=np.genfromtxt(path,delimiter=',',skip_header=1,dtype=None)data2[:3]# 顯示前三行#> array([( 18., 8, 307., 130, 3504, 12. , 70, 1, b'"chevrolet chevelle malibu"'),#> ( 15., 8, 350., 165, 3693, 11.5, 70, 1, b'"buick skylark 320"'),#> ( 18., 8, 318., 150, 3436, 11. , 70, 1, b'"plymouth satellite"')],#> dtype=[('f0', '<f8'), ('f1', '<i8'), ('f2', '<f8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<f8'), ('f6', '<i8'), ('f7', '<i8'), ('f8', 'S38')])最後,'np.savetxt'將數據保存為csv文件.

# 保存數據為csv文件np.savetxt("out.csv",data,delimiter=",")

3. 如何保存和加載numpy數據

Numpy提供了.npy和.npz文件類型來實現。如果保存一個ndarray數據,使用np.save保存為.npy文件;若保存多個ndarray數據,使用np.savez保存為.npz文件。加載numpy數據,則統一用np.load函數.

# 保存單一的numpy數據,使用.npy文件np.save('myarray.npy',arr2d)# 保存多個numpy數據,使用.npz文件np.savez('array.npz',arr2d_f,arr2d_b)# 加載.npy文件a=np.load('myarray.npy')print(a)#> [[0 1 2]#> [3 4 5]#> [6 7 8]]加載.npz文件,獲取特定的數組值.

# 加載.npz文件b=np.load('array.npz')print(b.files)b['arr_0']#> ['arr_0', 'arr_1']#> array([[ 0., 1., 2.],#> [ 3., 4., 5.],#> [ 6., 7., 8.]])雖然通過'arr_0'和'arr_1'獲取了數組值,但是我們對這兩個索引比較陌生,下面介紹手動設置索引保存和加載數組.

# 增加索引保存數據b=np.savez('array.npz',arr2d_f=arr2d_f,arr2d_b=arr2d_b)c=np.load('array.npz')print(c.files)c['arr2d_f']#> ['arr2d_f', 'arr2d_b']#> array([[1., 2., 3., 4.],[3.,4.,5.,6.],[5.,6.,7.,8.]])

4. 如何按列或行拼接numpy數組

本節介紹三種拼接numpy數組的方法:

方法1:設置np.concatenate參數axis的值為1或0,實現數組的列拼接或行拼接。方法2:np.vstack和np.hstack方法3:np.r_和np.c_

需要注意的是,np.r_和np.c_使用方括號來拼接數組,其他兩種方法使用括號。

首先,定義兩個需要拼接的數組.

# 定義兩個拼接的數組a=np.zeros([4,4])b=np.ones([4,4])print(a)print(b)#> [[ 0. 0. 0. 0.]#> [ 0. 0. 0. 0.]#> [ 0. 0. 0. 0.]#> [ 0. 0. 0. 0.]]#> [[ 1. 1. 1. 1.]#> [ 1. 1. 1. 1.]#> [ 1. 1. 1. 1.]#> [ 1. 1. 1. 1.]]行拼接數組

# 行拼接數組np.concatenate([a,b],axis=0)np.vstack([a,b])np.r_[a,b]#> array([[ 0., 0., 0., 0.],#> [ 0., 0., 0., 0.],#> [ 0., 0., 0., 0.],#> [ 0., 0., 0., 0.],#> [ 1., 1., 1., 1.],#> [ 1., 1., 1., 1.],#> [ 1., 1., 1., 1.],#> [ 1., 1., 1., 1.]])列拼接數組

# 列拼接np.concatenate([a,b],axis=1)np.hstack([a,b])np.c_[a,b]#> array([[ 0., 0., 0., 0., 1., 1., 1., 1.],#> [ 0., 0., 0., 0., 1., 1., 1., 1.],#> [ 0., 0., 0., 0., 1., 1., 1., 1.],#> [ 0., 0., 0., 0., 1., 1., 1., 1.]])

5. 如何按列對數據進行排序

本節介紹三種按列排序方法:np.sort,np.argsort和np.lexsort。在介紹三種排序方法前,先定義一個2維數組.

arr=np.random.randint(1,6,size=[8,4])arr#> array([[3, 3, 2, 1],#> [1, 5, 4, 5],#> [3, 1, 4, 2],#> [3, 4, 5, 5],#> [2, 4, 5, 5],#> [4, 4, 4, 2],#> [2, 4, 1, 3],#> [2, 2, 4, 3]])np.sort基於列對arr數組進行排序.

# axis=0表示列排序,1表示行排序np.sort(arr,axis=0)#> array([[1, 1, 1, 1],#> [2, 2, 2, 2],#> [2, 3, 4, 2],#> [2, 4, 4, 3],#> [3, 4, 4, 3],#> [3, 4, 4, 5],#> [3, 4, 5, 5],#> [4, 5, 5, 5]])由上面結果分析,np.sort排序函數認為所有列是相互獨立的,對所有列進行排序,破壞了每行的結構,

使用np.argsort函數可以保留行的完整性 .

# 對arr的第一列進行排序,返回索引sorted_index_1stcol=arr[:,0].argsort()# 根據第一列的索引對數組排序,保留了行的完整性arr[sorted_index_1stcol]#> array([[1, 5, 4, 5],#> [2, 4, 5, 5],#> [2, 4, 1, 3],#> [2, 2, 4, 3],#> [3, 3, 2, 1],#> [3, 1, 4, 2],#> [3, 4, 5, 5],#> [4, 4, 4, 2]])倒轉argsort索引實現遞減排序

# 遞減排序arr[sorted_index_1stcol[::-1]]#> array([[4, 4, 4, 2],#> [3, 4, 5, 5],#> [3, 1, 4, 2],#> [3, 3, 2, 1],#> [2, 2, 4, 3],#> [2, 4, 1, 3],#> [2, 4, 5, 5],#> [1, 5, 4, 5]])若要基於多個列對數組進行排序,使用np.lexsort函數,它的參數是元組類型,元組的每個元素表示數組的某一列,排序規則是:越靠近右邊的列,優先級越高.

# 先比較第一列,第一列相同的情況下再比較第二列lexsorted_index=np.lexsort((arr[:,1],arr[:,0]))arr[lexsorted_index]#> array([[1, 5, 4, 5],#> [2, 2, 4, 3],#> [2, 4, 5, 5],#> [2, 4, 1, 3],#> [3, 1, 4, 2],#> [3, 3, 2, 1],#> [3, 4, 5, 5],#> [4, 4, 4, 2]])

6. 如何用Numpy處理日期

np.datatime64創建日期對象,精確度達到納秒,你可以使用標準的YYYY-MM-DD格格式的字符串作為參數創建日期.

# 創建datetime64對象date64=np.datetime64('2018-02-04 23:10:10')date64#> numpy.datetime64('2018-02-04T23:10:10')從datatime64對象分離時間

# 從datatime64對象分離時間dt64=np.datetime64(date64,'D')dt64#> numpy.datetime64('2018-02-04')如果你想增加天數或其他任何時間單元,比如月份,小時,秒等,使用np.timedelta函數非常方便.

# np.delta建立多個時間單元tenminutes=np.timedelta64(10,'m')# 10 分鐘tenseconds=np.timedelta64(10,'s')# 10 秒鐘tennanoseconds=np.timedelta64(10,'ns')# 10 納秒print('Add 10 days: ',dt64+10)# 增加10天print('Add 10 minutes: ',dt64+tenminutes)# 增加10分鐘print('Add 10 seconds: ',dt64+tenseconds)# 增加10秒print('Add 10 nanoseconds: ',dt64+tennanoseconds)# 增加10納秒#> Add 10 days: 2018-02-14#> Add 10 minutes: 2018-02-04T00:10#> Add 10 seconds: 2018-02-04T00:00:10#> Add 10 nanoseconds: 2018-02-04T00:00:00.000000010dt64對象轉化為字符串

# dt64轉化為字符串np.datetime_as_string(dt64)#> '2018-02-04'np.is_busday函數判斷日期是否為工作日,工作日默認為周一至周五.

print('Date: ',dt64)print("Is it a business day?: ",np.is_busday(dt64))#> Date: 2018-02-04#> Is it a business day?: False # False表示不是手動設置工作日的時間,如設置工作日為周六周日,其他時間為休息日.

date64=np.datetime64('2019-04-14')# 設置周六周日為工作日np.is_busday(date64,weekmask='Sat Sun')#> Truenp.busday_offset查看後幾個工作日的日期.

# 周四date64=np.datetime64('2019-04-11')# 查看兩個工作日後的日期t=np.busday_offset(date64,2)t#> numpy.datetime64('2019-04-15')若當前工作日為非工作日,則默認是報錯的.

# 周六date64=np.datetime64('2019-04-13')# 查看兩個工作日後的日期t=np.busday_offset(date64,2)t#> ValueError: Non-business day date in busday_offset # 非工作日不能作為busday_offset的參數可以增加參數forward或backward來報錯,forward的含義是若當前日期非工作日,那麼往前尋找最接近當前日期的工作日,backward的含義則是往後尋找最接近當前日期的工作日.

#當前時間為周六(2019-04-13),往前最接近當前時間的工作日是2019-04-15,兩個工作日偏移後的日期是2019-04-17print("Add 2 business days, rolling forward to nearest biz day: ",np.busday_offset(date64,2,roll='forward'))#當前時間為周六(2019-04-13),往後最接近當前時間的工作日是2019-04-12,兩個工作日偏移後的日期是2019-04-16print("Add 2 business days, rolling backward to nearest biz day: ",np.busday_offset(date64,2,roll='backward'))#> Add 2 business days, rolling forward to nearest biz day: 2019-04-17#> Add 2 business days, rolling backward to nearest biz day: 2019-04-166.1 如何創建日期序列

np.arange可簡單創建日期序列

# 建立日期序列dates=np.arange(np.datetime64('2018-02-01'),np.datetime64('2018-02-10'))print(dates)# 檢查是否為工作日np.is_busday(dates)#> ['2018-02-01' '2018-02-02' '2018-02-03' '2018-02-04' '2018-02-05'#> '2018-02-06' '2018-02-07' '2018-02-08' '2018-02-09']array([True,True,False,False,True,True,True,True,True],dtype=bool)6.2 如何把numpy.data64對象轉化為datatime.datatime對象

# np.datetime64類型轉化為datetime.datetime類型importdatetimedt=dt64.tolist()dt#> datetime.date(2018, 2, 4)獲取datatime對象的年月日非常簡便

print('Year: ',dt.year)print('Day of month: ',dt.day)print('Month of year: ',dt.month)print('Day of Week: ',dt.weekday())# 周五#> Year: 2018#> Day of month: 4#> Month of year: 2#> Day of Week: 6

7. 高階numpy函數介紹

7.1 標量函數的向量化

標量函數只能處理標量,不能處理數組

# 定義標量函數deffoo(x):ifx%2==1:returnx**2else:returnx/2# On a scalarprint('x = 10 returns ',foo(10))print('x = 11 returns ',foo(11))#> x = 10 returns 5.0#> x = 11 returns 121# 函數不能處理數組# print('x = [10, 11, 12] returns ', foo([10, 11, 12])) # 錯誤np.vectorize使標量函數也能處理數組,可選參數otypes為輸出的類型.

# 函數向量化,向量化的輸出類型是floatfoo_v=np.vectorize(foo,otypes=[float])print('x = [10, 11, 12] returns ',foo_v([10,11,12]))print('x = [[10, 11, 12], [1, 2, 3]] returns ',foo_v([[10,11,12],[1,2,3]]))#> x = [10, 11, 12] returns [ 5. 121. 6.]#> x = [[10, 11, 12], [1, 2, 3]] returns [[ 5. 121. 6.]#> [ 1. 1. 9.]]7.2 apply_along_axis函數

首先定義一個二維數組

# 定義一個4x10的隨機二維數組np.random.seed(100)arr_x=np.random.randint(1,10,size=[4,10])arr_x#> array([[9, 9, 4, 8, 8, 1, 5, 3, 6, 3],#> [3, 3, 2, 1, 9, 5, 1, 7, 3, 5],#> [2, 6, 4, 5, 5, 4, 8, 2, 2, 8],#> [8, 1, 3, 4, 3, 6, 9, 2, 1, 8]])如果我們要找數組每行或每列的最大值,numpy的一個最大特點是基於向量化操作的,因此我們使用np.apply_along_axis函數找每行或每列的最大值.

# 基於列操作,找每列的最大值print('max of per column: ',np.apply_along_axis(np.max,0,arr=arr_x))# 基於行操作,找每行的最大值print('max of per row: ',np.apply_along_axis(np.max,1,arr=arr_x))#> max of per column: [9 9 4 8 9 6 9 7 6 8]#> max of per row: [9 9 8 9]7.3 searchsorted函數

np.searchsorted函數返回某一變量在有序數組的位置,在該位置插入變量後數組仍然是有序的.

# 生成有序數組x=np.arange(10)print('Where should 5 be inserted?: ',np.searchsorted(x,5))# 若遇到相同大小的數值,輸入變量放在右邊位置print('Where should 5 be inserted (right)?: ',np.searchsorted(x,5,side='right'))#> Where should 5 be inserted?: 5#> Where should 5 be inserted (right)?: 67.4 如何增加數組維度

在不增加任何額外數據的前提下,np.newaxis函數可以增加數組的維數,newaxis在的位置就是要增加的維度.

# 定義一維數組x=np.arange(5)print('Original array: ',x)# 數組維度為2print('ndims of x:',x.ndim)# 列維度增加x_col=x[:,np.newaxis]print(x_col)# 數組維度為2print('ndims of x_col: ',x_col.ndim)print('x_col shape: ',x_col.shape)# 行維度增加x_row=x[np.newaxis,:]print(x_row)print('x_row shape: ',x_row.shape)# 數組維度為2print('ndims of x_row: ',x_row.ndim)#> Original array: [0 1 2 3 4]#> ndims of x: 1#> [[0][1][2][3][4]]#> ndims of x_col: 2#> x_col shape: (5, 1)#> [[0 1 2 3 4]]#> x_row shape: (1, 5)#> ndims of x_row: 27.5 Digitize函數

np.digitize函數返回數組每個元素屬於bin的索引位置.

# 構建數組和binx=np.arange(10)bins=np.array([0,3,6,9])# 返回bin索引位置np.digitize(x,bins)#> array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4])可視化分析digitize算法原理:

如上圖,根據變量落在bin的區間範圍,返回對應的索引.

7.7 Clip函數

np.clip函數將數字限制在給定截止範圍內,所有小於範圍下限的數被當成下限值,大於範圍上限的數被當成上限值.

# 限制x的所有元素位於3和8之間np.clip(x,3,8)#> array([3, 3, 3, 3, 4, 5, 6, 7, 8, 8])7.8 Histogram函數和Bincount函數

np.bincount函數統計最小值到最大值的個數,最小值為0.

# Bincount例子x=np.array([1,1,2,3,2,4,4,5,6,6,6])np.bincount(x)# 0出現0次, 1出現2次, 2出現2次, 3出現1次,4出現2次,5出現1次,6出現3次#> array([0, 2, 3, 0, 2, 1, 3], dtype=int64)np.histogram函數統計數據落入bins的區間,不考慮bins兩側的區間(如下圖所示).

相關焦點

  • 清晰易懂的Numpy入門教程
    翻譯 | 石頭來源 | Machine Learning PlusNumpy是python語言中最基礎和最強大的科學計算和數據處理的工具包,如數據分析工具pandas也是基於numpy構建的,機器學習包scikit-learn也大量使用了numpy方法。本文介紹了Numpy的n維數組在數據處理和分析的所有核心應用。
  • Numpy入門詳細教程
    >numpy入門詳細教程python數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。平時雖然一直在用,也看過很多教程,但紙上得來終覺淺,還是需要自己系統梳理總結才能印象深刻。本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。
  • python數據科學系列:numpy入門詳細教程
    平時雖然一直在用,也看過很多教程,但紙上得來終覺淺,還是需要自己系統梳理總結才能印象深刻。本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。
  • 大數據分析Python NumPy庫使用教程
    大數據分析Python NumPy庫使用教程為數據工程師提供有關NumPy的從零開始的培訓。這意味著您不需要具有NumPy的任何經驗,也不會浪費任何時間學習與數據工程工作無關的東西。 在瀏覽了基礎知識之後,您將快速開始使用NumPy來構建和操作二維和三維數組。
  • Numpy詳細教程
    >>> b = array([6, 7, 8])>>> barray([6, 7, 8])>>> type(b)numpy.ndarray創建數組有好幾種創建數組的方法。
  • 教程| Numpy的線性代數運算
    因此,NumPy提供了一個用於矩陣乘法的dot函數(既是一個數組方法也是numpy命名空間中的一個函數):.dot(y)等價於np.dot(x, y):一個二維數組跟一個大小合適的一維數組的矩陣點積運算之後將會得到一個一維數組numpy.linalg中有一組標準的矩陣分解運算以及諸如求逆和行列式之類的東西
  • Numpy入門教程:10. 統計相關
    統計相關次序統計numpy.amin(a[, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue])Return the minimum of an array or minimum along an axis.
  • p圖教程|清晰乾淨的眼妝怎麼拍 附修圖教程
    p圖教程|清晰乾淨的眼妝怎麼拍 附修圖教程·經常有妹子問我的眼妝教程怎麼拍的,為什麼我拍出來的眼妝那麼清晰乾淨,而自己拍出來的眼妝都是模糊的,並且顯得眼妝很髒今天就跟你們分享一下我的拍照過程有相機的用相機,沒有的直接用手機後置攝像頭就可以了其實設備真的不是最重要的,重要的是光線,能在自然光下拍當然是最好了,如果光線不足,可以利用自帶燈光的化妝鏡我用的是AMIRO的日光鏡,3檔調光,我平時用的是日光那一檔,跟日光的相似度很高,模擬自然光,顯色準而且不偏光,拍出來的眼妝相對色差會小很多,光線足自然拍出來的眼妝也會很清晰
  • Python教程:numpy數組初始化為相同的值
    有時我們需要將numpy數組初始化為相同的值,numpy提供了一些方法幫助我們實現這個目的。
  • 揭秘Numpy「高效使用哲學」,數值計算再提速10倍!
    讀過很多講解Numpy的教程後,我準備寫一個Numpy系列。 2 導入Numpy 只需要一行代碼就能導入: 在numpy包中,描述向量,矩陣和更高維度的數據集使用的術語是.
  • Python中的Numpy基礎20問
    import numpy as np# 創建二維數組x2 = np.array([[1,2,3],[4,5,6]])# 將x2轉換為三維數組,並且自定義每個軸的元素數量x2.resize((1,2,3))x2'''輸出:array([[[1, 2, 3],[4, 5, 6]]])'''如何對數組進行索引和切片操作?numpy一維數組的索引和切片操作類似python列表,這裡不多講。
  • Numpy應用整理
    numpy簡介numpy是python最為常用的庫,沒有之一,它表示Numeric Python,從名字也可以看出來,它被用來做數值計算,常與scipy配合使用。現在幾乎各種應用場合都會用到numpy,主要有以下幾個原因:numpy提供了很多數值計算和常用算法的函數numpy歸功了很多線性代數的相關操作numpy的執行效率高首先導入numpy庫import numpy as np常規列表應用用numpy建的列表類型都是ndarray,因此我們首先來看np.array
  • NumPy簡潔教程
    但是如果你想在你的機器上單獨安裝NumPy,只需在你的終端上鍵入以下命令:pip install numpy現在需要導入庫:import numpy as npnp實際上是數據科學界使用的NumPy的縮寫。Python列表與NumPy數組有什麼區別?
  • 數據分析必備,NumPy進階80題(附下載)
    本文共分為兩個部分:完整版NumPy80題Notebook版下載方式(文末獲取)import numpy as npprint(np.(data1 - mu) / sigmanp.savetxt('test.txt',data1)import n
  • 淺談鋼琴初學者基本教程如何選擇?
    關於鋼琴初學者基本教程,眾說不一,或許大部分鋼琴老師制定的都不太一樣,本文只是討論某部分教材的特點和作用,只供小夥伴參考學習用,實際鋼琴培訓時一切以老師安排的為準。《湯普森淺易鋼琴教程》,也就是《小湯》,《小湯》是採用中央c入門法,一課學習一個音,逐步推進的方式,好處是幼兒會學得比較紮實,不好的是很長一個階段雙手擠在中央c周圍較窄音域彈奏;到第三冊之後出現技術課題不夠明確,句法、連線差強人意等情況。《約翰-湯普森現代鋼琴教程》,即《大湯》,《大湯》是為大一些的小孩編寫的入門教材,其優點是曲目非常豐富,活潑生動,而且選擇性多。
  • 用思維導圖整理學習語文六下《北京的春節》,清晰明了,簡單易懂
    思維導圖在整理複習方面,發揮了強大的優勢,讓人覺得清晰明了,簡單易懂。下面以《北京的春節》為例,我們從作者簡介、積累字詞、概括主題、課文結構、寫法特點和拓展延伸六個方面來整理學習。多音字有「正、鋪」,正zhēng(正月)zhèng(正常);鋪pū(鋪墊)pù(店鋪)好詞有萬象更新、截然不同、懸燈結彩、殘燈末廟、萬不得已這樣每種分門別類,簡明扼要,清晰明了。
  • NumPy學的還不錯?來試試這20題
    又到了NumPy進階修煉專題。NumPy大家應該不陌生了,看了太多的原理講解之後,用刷題來學習是最有效的方法,本文將帶來20個NumPy經典問題,附贈20段實用代碼,拿走就用,建議打開Jupyter Notebook邊敲邊看。
  • 星界邊境攻略 新手教程+進階心得圖文攻略
    下面請看小編帶給大家的星界邊境攻略,星界邊境怎麼玩新手教程+更深入的進階心得圖文攻略。 星界邊境攻略  星界邊境圖文攻略  星界邊境新手教程請看星界邊境怎麼玩新手教程。  一、在進入遊戲前,先了解一下Starbound的基本情況。  星界邊境遊戲劇情背景:  Starbound故事設定為,母星慘遭未知敵人毒手,然後玩家乘坐逃生艙漫無目的絕望地迷失在茫茫的星辰大海中。走運的是,你的逃生艙居然跟一個廢棄的空間站取得了聯繫。
  • 入門|數據科學初學者必知的NumPy基礎知識
    這篇教程介紹了數據科學初學者需要了解的 NumPy 基礎知識,包括如何創建 NumPy 數組、如何使用 NumPy 中的廣播機制、如何獲取值以及如何操作數組。更重要的是,大家可以通過本文了解到 NumPy 在 Python 列表中的優勢:更簡潔、更快速地讀寫項、更方便、更高效。本教程將使用 Jupyter notebook 作為編輯器。讓我們開始吧!
  • Python NumPy面向數組的編程(附詳細代碼)
    但是,如果你已經掌握了,就可以直接跳到最後兩個部分(「 進階」和「高階教程」),其中將介紹陣列方向的「難題」以及基本的性能提示。到最後,能夠將過程編程的樣式優化,基於數組的樣式,能夠達到快速而無循環的效果。數組創建導入NumPy之後import numpy as np,我們就可以滾動了:一維我們可以通過傳遞一個元素列表來創建一個數組。