ch2 基本工具介紹

2021-10-07 07:29:18 字數 4079 閱讀 9938

安裝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 測試是為發現錯誤而執行程式的過程 軟體測試心理學 人類的行為總是傾向於具有高度目標性,建議乙個正確的目標有重要的心理學影響,如果我們的目標在於證明程式中的錯誤,那我們設計的測試資料就會發現更多的問題,反之,則相反。如果在測試階段發現了錯誤並且成功得...