安裝miniconda3作為python環境。
如果配置了cuda,可以安裝tensorflow-gpu。
資料預處理
numpy
提供高效的n維陣列和向量計算
scipy
依賴numpy,提供高效數值計算,包含函式最優、數值積分等任務模組
pandas
資料結構和資料分析庫。包含高階資料結構和類sql語句
資料視覺化
matplotlib
資料視覺化庫
標準模型庫
scikit-learn
標準機器學習庫,主要用於分類、回歸和聚合
statsmodels
標準統計模型庫,主要用於假設檢驗和引數置信區間分析
spark ml
分布式機器學習演算法庫,可在分布式集群上,如hadoop,對大量資料建模。由scala開發,提供python api
tensorflow
成熟的數度學習演算法庫,提供gpu運算模組
小技巧:
import numpy as np
type(np) # module
dir(np) # 返回np的所有方法
help(np.max) # 返回np.max的說明文件
print(np.max.__doc__)
# 和上一條命令結果一致;一定要加print,不然格式很亂。
wordcount.py
def wordcount(data):
"""輸入字串列表data,統計列表中每個字串的出現次數
引數----
data : list[str]
返回----
re : dict
"""re = {}
for i in data:
re[i] = re.get(i, 0) + 1
return re
if __name__=="__main__":
data =
print(wordcount(data))
在python2中,預設編碼是ascii,當程式出現非ascii編碼時,會報錯,所以在python2指令碼第一行加入:# -*- coding: utf-8 -*-
,表示:此指令碼的編碼格式為utf-8。
當程式中有中文字元,就需要加入這一行來顯示中文字元。
在python3中,預設使用utf-8編碼,不需要加入這行。
還有一種開頭方式較為常見:#! /usr/bin/python
。在指令碼第一行以#!
開頭,稱之為"shebang",用來指定由哪個直譯器來執行指令碼。這句話的意思就是:此指令碼的編譯器要使用/usr/bin/python。
大部分linux發行版預設自帶python2,使用python
預設開啟的就是python2;但是在ubuntu20.04已經移除2,需要使用python3
命令啟動python3.8。python2指令碼為了能順利執行,需要指定特定編譯器。
我們推薦使用#! /usr/bin/env python
。為了避免當使用者沒有將python裝在預設的/usr/bin路徑裡,而找不到python直譯器的問題。過程:作業系統首先會到usr/bin/env裡查詢python的安裝路徑,再呼叫對應路徑下的直譯器程式完成操作。這句**的作用是讓作業系統會去環境設定尋找python目錄。
在ubuntu20.04中,使用/usr/bin/env python3
也能啟動python3.8
檢查字典是否包含key,如果包含則返回對應的鍵值,沒有則返回預設值default=none。
使用dict.get()
來統計data中各個字串出現的次數,這個思路還是很不錯的。
python中,所有內容都是物件。
比如函式wordcount()
可以使用wordcount.__doc__
檢視函式的注釋文件。
同樣的,指令碼也被當作模板(module)物件。module物件有個內建屬性__name__
,至於這個屬性的值,取決於使用者如何使用。
# 函式寫法
def f(a,b):
return a+b
c=f(1,2)
# lambda表示式
g = lambda a, b: a+b
g(1,2)
lambda
表示式不僅簡潔,把它和其他內建函式使用,可以方便地建立匿名函式
def addone(data):
"""把data的每個元素都加1,返回新的列表。
"""re=
for i in data:
# lambda+map()完成同樣的效果
a=range(6)
b = list(map(lambda x:x+1, a))
map(function, iterable, ...)
第二個引數是可迭代物件,比如list, tuple和dict。用法是:把第二個引數中的每個元素依次代入function。
在python3中,直接使用map()
得到的是個map object
,是沒法直接展示結果的。所以需要強制型別轉換,上面我們使用list()
強制轉換成了list型別,也可以用tuple
強制轉換成元組。
lambda
也可以接受函式作為引數;
a = range(6)
twotimes = lambda x: x*2
square = lambda x: x**2
b = list(list(map(lambda x: x(i), [twotimes, square])) for i in a)
print(b)
這裡強調一下兩個list的用法。裡面的list是把map->list;由於for迴圈在後面,所以最外面也需要加乙個list組織起來。
filter
的用法和map
很像,作用是篩選,篩選的條件是:去掉第乙個函式的返回值是0的元素,也就是那些結果為false的元素。
a = range(6)
list(filter(lambda x: x%2==0, a))
reduce
是用來做聚合運算的。python3中,把reduce放在了functools
,使用前需要匯入。
from functools import reduce
reduce(lambda c,d: c+d, a, 0)
# 返回值:15
# 第乙個引數為求和函式;第二個引數是需要求和列表;第三個引數是初始值
作用:像匯入numpy
庫一樣,匯入自己的指令碼。以下面乙個簡單檔案結構為例:
mini_project
|_components
counter.py
selecter.py
|_tests
test_selecter.py
問題是:上面兩處呼叫如何實現?如果按照導入庫一樣實現,那麼實現步驟如下:
mini_project
__init__.py
|_components
__init__.py
counter.py
selecter.py
|_tests
__init__.py
test_selecter.py
解題報告 ch2
127 accordian patience 1.測試資料大約30000條 使用stl的stack就是屎 用兩層vector,並利用線性表可以在規定的時間內解決掉 101 the blocks problem 1.思路 使用線性表來解決,記錄每個pile的初始方塊,記錄每個方塊的left 和 rig...
Duda模式分類 ch2 習題
這一章的題磨了好幾天了,目前的進度在26,剛一半。中間還有一些不明白的。簡單寫個總結 1.a 相當於證明左邊等於2p w1 x p w2 x p x 的積分,b c d 按定義證 2.簡單計算,歸一化定義 3.a 直接寫吧。b 不太明白,此解是哪個解。4.計算,c 的解是 o1u2 o2u1 o1 ...
軟體測試的藝術 CH2
by glenford j.myers u.s.a 測試是為發現錯誤而執行程式的過程 軟體測試心理學 人類的行為總是傾向於具有高度目標性,建議乙個正確的目標有重要的心理學影響,如果我們的目標在於證明程式中的錯誤,那我們設計的測試資料就會發現更多的問題,反之,則相反。如果在測試階段發現了錯誤並且成功得...