In[1]: L1 = [2, True, 'a']
[type(item) for item in L1]
Out[1]: [int, bool, str]
不過這種"動態"的特性並不是免費的,list中的每一個項目必須包含了資料的型態、大小、參考計數等等額外的資料,所以list的缺乏運算的效率(或者說根本沒法做數學運算),因此若能儲存成同一型態,雖然缺乏型態上的彈性,但卻能大幅增加運算的效率。雖然python提供了標準的array模組,但真的好用且真正多數人使用的是numpy模組。numpy會把陣列中的資料轉成相同的型態,因而提升運算效能:
常用的numpy程式指令:
陣列的串接,可分成水平跟垂直的方式:
有人喜歡用reshape也可:
陣列分割,np.split()中的second argument是分割的位置:
創建陣列,如.linspace這個在往後繪圖中會常用到:
Universal Function提供了方便的矩陣運算,可以看看下列例子:
numpy內的亂數random也是很常用的,非常非常重要。
random函數其實並不是真的"隨機"取樣,而是偽亂數,就是有亂數的樣子,但實際上是先安排好的,所以其實可以避免每一次取的亂數不同,方法就是利用.RandomState(),argument輸入相同的數字,取得的"亂數"就會相同,可以確保每一次執行都有一樣的結果:
另外也可以使用條件式取得布林陣列(True或是False),並用np.sum()或np.count_nonzero()計算符合運算條件的資料數目,這個在數據的分析上非常有用的。
注意np.sum()可以axis=0 or 1限定以行或列的方向進行運算,另外np.any()、np.all()應該看例子就可以理解用途了。
不過這種"動態"的特性並不是免費的,list中的每一個項目必須包含了資料的型態、大小、參考計數等等額外的資料,所以list的缺乏運算的效率(或者說根本沒法做數學運算),因此若能儲存成同一型態,雖然缺乏型態上的彈性,但卻能大幅增加運算的效率。雖然python提供了標準的array模組,但真的好用且真正多數人使用的是numpy模組。numpy會把陣列中的資料轉成相同的型態,因而提升運算效能:
常用的numpy程式指令:
陣列的串接,可分成水平跟垂直的方式:
陣列的改造,如陣列互換,這個在Machine Learning中常用到,非常重要。
有人喜歡用reshape也可:
陣列分割,np.split()中的second argument是分割的位置:
創建陣列,如.linspace這個在往後繪圖中會常用到:
Universal Function提供了方便的矩陣運算,可以看看下列例子:
numpy內的亂數random也是很常用的,非常非常重要。
random函數其實並不是真的"隨機"取樣,而是偽亂數,就是有亂數的樣子,但實際上是先安排好的,所以其實可以避免每一次取的亂數不同,方法就是利用.RandomState(),argument輸入相同的數字,取得的"亂數"就會相同,可以確保每一次執行都有一樣的結果:
另外也可以使用條件式取得布林陣列(True或是False),並用np.sum()或np.count_nonzero()計算符合運算條件的資料數目,這個在數據的分析上非常有用的。
注意np.sum()可以axis=0 or 1限定以行或列的方向進行運算,另外np.any()、np.all()應該看例子就可以理解用途了。
沒有留言:
張貼留言