【AI白身境】学AI必备的python基础
今天是新專欄《AI白身境》的第三篇,所謂白身,就是什么都不會,還沒有進(jìn)入角色。
上一篇給大家介紹了如何正確使用Linux,如何利用shell,vim,git這三大神器。相信大家也掌握的差不多了,今天就和大家分享下對于python,我們應(yīng)該如何掌握,如何正確把它和深度學(xué)習(xí)完美的結(jié)合起來。
作者 | 湯興旺 言有三
? ? 編輯 | 湯興旺 言有三
01
基礎(chǔ)操作
人生苦短,必須學(xué)好python!python現(xiàn)在火的程度已經(jīng)不需要我多言了,它為什么為火,我認(rèn)為有兩個原因,第一是人工智能這個大背景,第二是它真的太容易學(xué)了,沒有任何一門語言比它好上手,接下來我將和大家分享下python的基礎(chǔ)操作。另外請注意,我的所有操作都是基于python3!
1.1 python核心內(nèi)容之函數(shù)
如果你想要學(xué)好python,務(wù)必學(xué)好function,不然就相當(dāng)于沒學(xué)過python。
1.1.1 函數(shù)定義
在python函數(shù)定義時有五個要點(diǎn),分別是def、函數(shù)名、函數(shù)體、參數(shù)、返回值、以及兩個英文版符號:小括號(括號內(nèi)為參數(shù))和冒號。下面對這5點(diǎn)分別解釋下:
def:函數(shù)關(guān)鍵字。必須要有,系統(tǒng)看到它,就知道下面是個函數(shù)了。
函數(shù)名:函數(shù)的名稱。就是給函數(shù)起了個名字,當(dāng)你調(diào)用函數(shù)時,用函數(shù)名就可以直接調(diào)用了。
函數(shù)體:函數(shù)中進(jìn)行的具體操作。就是你這個函數(shù)想要實(shí)現(xiàn)的功能。
參數(shù):提供給函數(shù)體。
返回值:當(dāng)函數(shù)執(zhí)行完畢后,可以給調(diào)用者返回想要的數(shù)據(jù)。
下面通過一個具體的實(shí)例來說明下:
def get_image(picture_path):
? ? ?img = cv2.imread("picture_path")
? ? ?return? img
上面實(shí)例中,get_image是這個函數(shù)的函數(shù)名,這個函數(shù)的參數(shù)是picture_path,就是圖片的路徑,這個參數(shù)會傳到函數(shù)體中。如果你的圖片路徑是d://01.jpg,這時候函數(shù)體就會變成img =?cv2.imread("d://01.jpg"),最后返回圖片。
1.1.2 函數(shù)參數(shù)
相信你已經(jīng)知道函數(shù)應(yīng)該如何定義了,接下來再說說函數(shù)中最難理解也是最重要的一點(diǎn),那就是函數(shù)參數(shù)。
首先我們說說位置參數(shù)。
def sum(x):
? ? z = x+x
? ? return z
>>>sum(10)
20
這里的x可以認(rèn)為是一個位置參數(shù),顧名思義,x先占一個位置,當(dāng)給予它一個值時,它會傳到函數(shù)體中,注意像這種位置參數(shù),務(wù)必要給予一個值,不然程序會報錯。
接下來說說默認(rèn)參數(shù)。
def sum(x,y=12):
? ? z = x+y
? ? return z
>>>sum(10)
22
>>>sum(10,13)
23
這個實(shí)例中,y = 12就是個默認(rèn)參數(shù),當(dāng)該參數(shù)沒有傳入相應(yīng)的值時,該參數(shù)就使用默認(rèn)值。但有點(diǎn)需要注意:默認(rèn)參數(shù)必須在位置參數(shù)后面,否則會報錯。
哈哈,報錯了,千萬不要放這樣的錯誤喲,想避免這樣的錯誤很簡單,就從你定義的順序從前往后寫就行。
然后再說說可變參數(shù)。
在使用python函數(shù)時,有時候我們不知道我們需要傳入多少個參數(shù),于是就有了可變參數(shù)的這個概念。為了更好的理解這個概念,先拋出一個問題:計算a+b+c+d+...的和,因為不知道有幾個數(shù)字,所以是個可變的問題。那么如何用python函數(shù)來解決這個問題呢,如下:
def sum(*numbers):
? ? sum = 0
? ? for n in numbers:
? ? ? ? sum =sum +n*n
? ? return sum?
>>>sum(10,2,12,3,4)
我們在參數(shù)前面加了一個*號。這樣這個參數(shù)就變成了可變參數(shù)。在調(diào)用該函數(shù)時,可以傳入任意個參數(shù),包括0個參數(shù)。
最后說一下關(guān)鍵字參數(shù)。
什么是關(guān)鍵字參數(shù),對于這個概念我們先看下面的代碼:
def penson(name,age,**kw):
? ??print('name:',name,'age:',age,'other:',kw)
>>>person('zhang san',24,city='changchun')
name:zhang san age:24 other:{'city':'changchun'}
通過上面的例子你應(yīng)該明白了關(guān)鍵字參數(shù)是什么了吧,實(shí)際上就是你傳入的參數(shù)比你之前定義的參數(shù)會多,注意位置參數(shù)必須要給它傳值。
這就是python函數(shù)的一些基本的方法,更復(fù)雜的函數(shù)實(shí)際上也就是上面的組合而已,只要多加練習(xí),一定能夠很好的掌握它。
1.2 python 縮進(jìn)規(guī)則
你可能已經(jīng)注意到上面我寫python函數(shù)時用到了許多縮進(jìn),你可能也會問自己為什么要采用縮進(jìn),應(yīng)該如何縮進(jìn)這些問題,下面請看我一一道來。
1.2.1 python縮進(jìn)的由來
我們在大學(xué)時可能都學(xué)過c語言,在c中主要通過{}來區(qū)分代碼快,但我們初學(xué)者往往忘記打{},而且花括號多了,我們就暈了。而python就不會出現(xiàn)這種問題,python中的縮進(jìn)可以理解為c中的{}。我們來看下下面這個例子:
def SayHello():
? ? print("hello world")
? ? SayHello()
你會發(fā)現(xiàn)此時不能輸出任何結(jié)果,我們再看下面一段代碼
def SayHello():
? ? print("hello world")
SayHello()
這樣就成功了,為什么會這樣呢,下面我介紹一種畫框法。如下圖所示相同顏色框在一起說明它們是屬于同一代碼塊。
這段代碼只是定義了一個函數(shù)并未執(zhí)行它,正確的寫法如下:
以后大家可以用這種畫框法確定縮進(jìn)是否正確。
02
矩陣庫——NumPy
NumPy(Numerical Python) 是 Python語言的一個擴(kuò)展程序庫,支持高維數(shù)組與矩陣運(yùn)算,提供了大量的數(shù)學(xué)函數(shù)庫。
對于深度學(xué)習(xí)來說,高維數(shù)組我們用的很多,因此要想學(xué)好深度學(xué)習(xí),必須對NumPy了如指掌。
2.1 ndarray對象? ? ? ? ? ? ? ? ? ? ? ? ??
在NumPy中我們用ndarray表示數(shù)組,可以說它是整個庫的核心。下面我們將從以下幾個方面來理解ndarray。
2.2 創(chuàng)建數(shù)組
要想對數(shù)組進(jìn)行運(yùn)算操作,我們必須先創(chuàng)建個數(shù)組。方法如下:
import numpy as np#導(dǎo)入numpy這個包
a0 = np.array([1,2,3,4])#采用列表方式
a1 = np.array((1,2,3,4))#采用元組方式
對于多維數(shù)組的創(chuàng)建(注意中括號),如下:
import numpy as np
a = np.array([[1,2,3],[2,3,4],[4,5,6]])
上面我們創(chuàng)建的數(shù)組里面的元素都是我們指定的,那么如何自動生成數(shù)組?又如何隨機(jī)的生成一個數(shù)組呢?我們首先看第一個方法arange(),如下:
import numpy as np
a = np.arange(0,1,0.1)
在上面這個數(shù)組中,arange()的第一個值代表開始值,第二個值代表終值(不包括這個值),最后一個值代表步長(間隔),如arange(1,10,1)代表一個從0-9,步長為1的數(shù)組。這就是arange(),經(jīng)常用的到!我們再看第二個方法linspace(),如下:
import numpy as np
a = np.linspace(0,10,10)
對于linspace(),它的前兩個值和arange()一樣,代表開始值和終值,但有個區(qū)別是linspace()默認(rèn)包括終值,如果你不想包括終值,加上endpoint = False即可,對于第三個值它是指元素的個數(shù),這個和arange不一樣,一定不要混淆。
最后我們再說下如何創(chuàng)建一個隨機(jī)數(shù)組。
在NumPy中有一龐大的函數(shù)庫,對于隨機(jī)數(shù)我們可以采用numpy.random模塊,該模塊中有大量和隨機(jī)數(shù)相關(guān)的函數(shù)。一些函數(shù)如下:
我們可以利用這些函數(shù)來創(chuàng)建你想要的隨機(jī)數(shù),一些實(shí)例如下:
import numpy as np
a = np.random.rand(2,2)
b = np.random.randn(2,2)
c = np.random.randint(0,9,(2,2))
創(chuàng)建隨機(jī)數(shù)是不是很簡單,其實(shí)對于數(shù)組的創(chuàng)建還有許多方法,如下面所示:
np.zeros() :生成元素全是0的數(shù)組
np.ones():生成元素全是1的數(shù)組
np.zeros_like(a):生成形狀和a一樣且元素全是0的數(shù)組
np.ones_like(a):生成形狀和a一樣且元素全是1的數(shù)組
...
相信通過上面的介紹你已經(jīng)掌握了如何創(chuàng)建一個數(shù)組了,很好!那么我們再思考一個問題,若碰到一個元素很多的數(shù)組,但卻不知道它的形狀等參數(shù),這時該怎么辦呢?對于這個問題我們可以通過下面的一些方法來解決。
獲取數(shù)組a的shape:a.shape
獲取數(shù)組a的元素類型:a.dtype
獲取數(shù)組a的維度:a.ndim
....
2.3 存取數(shù)組
當(dāng)一個數(shù)組創(chuàng)建好后,我們有時候可能需要對一個數(shù)組中的一些具體元素進(jìn)行運(yùn)算,或者更改數(shù)組中一些元素的值。進(jìn)行這些操作的前提是先能存取數(shù)組,為了解決這個問題,這里我們主要介紹切片法和整數(shù)列表來存取數(shù)組元素,這種方法其實(shí)也是最常見的。
import numpy as np
a = np.array([4,2,3,5,9,0,,6,8,7])
>>>[4,2,3,5,9,0,6,8,7]
對于上面這個數(shù)組,如果我想要得到5這個元素該怎么辦呢?很簡單,在ndarray中第一個元素的位置是0,本例中5在第四個位置,所以a[3] = 5。
我們還可以用切片獲取數(shù)組的一部分,如a[3:5]表示獲取第四個位置和第五個位置的元素,a[3:5]=[5,9];a[::-1]表示從最后一個元素到第一個元素,該方法省略了開始下標(biāo)和結(jié)束下標(biāo),這時候開始下標(biāo)就是對應(yīng)第一個元素,結(jié)束下標(biāo)就對應(yīng)著最后一個數(shù),-1表示步長為1,負(fù)號從后往前數(shù)。
上面說的都是一維數(shù)組的存取,我們再來說一下二維數(shù)組。其實(shí)二維數(shù)組和一維數(shù)組數(shù)組類似,只是二維數(shù)組有2個軸,所以下標(biāo)自然需要2個值來表示。請看下面的實(shí)例:
在二維數(shù)組中豎軸表示第0軸,橫軸表示第1軸,讀取元素時我們通過逗號把0軸和1軸隔開,這樣就可以通過一維數(shù)組的方法來讀取,最后兩者的交集就是我們需要讀取的元素。
我們再看下三維數(shù)組,這也是最復(fù)雜的,在深度學(xué)習(xí)特征數(shù)據(jù)處理時用的是最多的。我們先創(chuàng)建一個3行5列3通道的數(shù)組,看看效果。
再來分析下這個生成的數(shù)組。我們知道這個三維數(shù)組有下圖所示的三塊,而第幾塊又代表通道的第幾行數(shù)據(jù),圖中圈的那個塊就是通道的第2行數(shù)據(jù),另外在每一個塊里面每行數(shù)據(jù)代表通道的第幾列數(shù)據(jù)。圖中圈的那個塊5有行數(shù)據(jù),則代表著這個通道有5列數(shù)據(jù)。
其次在這個三維數(shù)組中,有下面圖示的這樣三列,一列代表一個通道。另外要注意所有的數(shù)據(jù)位置的下標(biāo)都是從0開始。
下面我要把圖示的元素改成8該怎么辦呢?如下:
通過上面的例子你是否理解了三維數(shù)組應(yīng)該怎樣存取數(shù)據(jù)了呢?理解了的話就打開vim多寫寫基本就能深刻的掌握了。
2.4 NumPy常見函數(shù)使用
現(xiàn)在我們已經(jīng)學(xué)會了創(chuàng)建數(shù)組和數(shù)組的存取,那么我們該如何對數(shù)組進(jìn)行函數(shù)運(yùn)算呢,這也是NumPy的核心內(nèi)容。
2.4.1 數(shù)組維度變換
我們首先說一下如何對數(shù)組的形狀進(jìn)行整理,即將一個任意形狀的矩陣轉(zhuǎn)化我們想要轉(zhuǎn)化的任意形狀,當(dāng)然要想完成這個操作,元素個數(shù)必須要滿足。請看下面實(shí)例:
import numpy as np
a = np.arange(0,10,1)
b = a.reshape(2,5)
print(a)
print(b)
上面的實(shí)例通過reshape()函數(shù)把一個1維數(shù)組,變成了一個2行5列的一個數(shù)組。reshape()里面的參數(shù)就是你想要轉(zhuǎn)換成的數(shù)組的形狀。再看一個實(shí)例對reshape()熟練下,如下:
import numpy as np
a = np.arange(0,10,1)
b = a.reshape(2,-1)
c = a.reshape(-1,5)
print(a)
print(b)
print(c)
b和c的結(jié)果是一樣的,而且和上一個實(shí)例的結(jié)果也一樣,這是為什么呢?其實(shí)這里面的-1代表自動生成的意思,意思就是對于b我已經(jīng)指定了數(shù)組的行是2行,那么系統(tǒng)就會自動生成一個5列,因為是10個數(shù),必須是5列,所以b和c仍然是2行5列的數(shù)組,這就是數(shù)組形狀變換。
說完數(shù)組形狀變換我們再看下如何對數(shù)組進(jìn)行維度交換。請看下面實(shí)例:
import numpy as np
a = np.arange(10).reshape(2,5)
b = a.swapaxes(0,1)
print(a)
print(b)
通過上面實(shí)例我們看出通過swapaxes()將一個數(shù)組的第0軸和第1軸進(jìn)行了交換,由2行5列變成了5列2行。這是二維數(shù)組的維度交換,我們再看一個三維數(shù)組的例子,如下:
import numpy as np
a = np.arange(24).reshape(2,3,4)
b = a.swapaxes(0,1)
print(a)
print(b)
這個實(shí)例我將三維數(shù)組的第0軸和第1軸進(jìn)行了交換,第0軸就是我在上面2.3存取數(shù)組這一節(jié)中說的塊,第1軸就是塊中的行,下面我將我對三維數(shù)組維度交換的理解和大家分享下。
如下,我們首先將第一塊第一行的[0,1,2,3]的位置記為(1,1),第一塊第二行的[4,5,6,7]的位置記為(1,2),第二塊第三行的[20,21,22,23]記為(2,3),其它幾個位置坐標(biāo)類推。現(xiàn)在我們需要將第0軸和第1軸交換,所以第一塊第一行的[0,1,2,3]的位置變?yōu)?1,1),就是第一塊第一行;第一塊第二行的[4,5,6,7]的位置變?yōu)闉?2,1),就是第二塊第一行;第二塊第三行的[20,21,22,23]變?yōu)?3,2),就是第三塊第二行。通過這樣的理解你對上面實(shí)例輸出的結(jié)果明白了嗎?明白的話,請繼續(xù)往下學(xué)如何對數(shù)組進(jìn)行降維。
對于數(shù)組降維,我們繼續(xù)通過實(shí)例來分析,如下:
import numpy as np
a = np.arange(10).reshape(2,5)
b =np.flatten()
c = a.reshape(-1)
d = a.ravel()
print(a)
print(b)
print(c)
print(d)
可以看出我們通過reshape(-1)、flatten()和ravel()函數(shù)將多維很容易就變成了1維數(shù)組。
2.4.2 堆疊數(shù)組
我們再說一下數(shù)組的堆疊,這個也是經(jīng)常會用的。數(shù)組的堆疊通常有水平疊加和垂直疊加,分別用到hstack()和vstack()函數(shù),請看下面的實(shí)例:
import numpy as np
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
c = np.hstack((a,b))
d = np.vstack((a,b))
print(c)
print(d)
通過這個例子我們也看出通過hstack()和vstack()將數(shù)組a和b堆疊成了一個數(shù)組。
上面就是我對NumPy在深度學(xué)習(xí)中最常見的幾點(diǎn)的介紹,其實(shí)還有許多,平時多多積累就行。
03
數(shù)據(jù)可視化——matplotlib
說完python我們再說說深度學(xué)習(xí)中用的比較多的matplotlib。matplotlib是python中最常用的可視化工具之一,用處非常大。
3.1 使用pyplot模塊繪圖
我們先通過matplotlib和NumPy繪制一個圖像。
import matplotlib.pyplot as plt
import numpy as np?
x=?np.linspace(0,10,100)?
y=np.sin(x)?
plt.figure(figsize=(8,4))??
plt.plot(x,y)??
plt.show()? ?
在這個實(shí)例中,我們首先通過import matplotlib的繪圖塊pyplot,并重新命名為plt。然后用figure調(diào)出一個畫布,figsize參數(shù)指定畫布的寬度和高度,單位是英寸(1英寸為25.4毫米)。創(chuàng)建好畫布后,我們就可以用plot()在畫布上畫圖了,plot()的前兩個參數(shù)分別代表X,Y軸數(shù)據(jù)的對象。另外plot()參數(shù)還可以指定曲線的標(biāo)簽,顏色,線寬等。
其實(shí)我們還能對坐標(biāo)軸通過下面的方法進(jìn)行一些參數(shù)的設(shè)置:
xlabel,ylabel:分別設(shè)置X,Y軸的標(biāo)題文字
title:設(shè)置標(biāo)題
xlim,ylim:分別設(shè)置X,Y軸的顯示范圍
legend:顯示圖例
請看下面一個標(biāo)準(zhǔn)的圖形:
接下來我們再看看如何畫直方圖,直方圖在圖像處理中經(jīng)常會用到。
在用plt.hist()畫直方圖時,第一個參數(shù)是繪圖數(shù)據(jù),這是必須要有的;另外bins代表直方圖的長條形數(shù)目,默認(rèn)為10;normed表示是否將得到的直方圖向量歸一化,默認(rèn)為0,代表不歸一;facecolor代表長條形的顏色;edgecolor代表長條行邊框的顏色;alpha代表透明度。
3.2 matlibplot讀取圖像
matplotlib的imread和imshow()提供了圖像的讀取和顯示功能,另外imread()從圖像文件中讀入數(shù)據(jù)得到的是一個圖像的NumPy數(shù)組。
現(xiàn)在我們用matlibplot讀取上面這一張可愛的貓圖,方法如下:
import matplotlib.pyplot as plt
img = plt.imread("02.jpg")
plt.imshow(img)
plt.show()
可以看出,很容易就能讀取一張圖片。我們可以通過下面一些方法查看這張圖片的屬性。
print(img.shape)
print(img.dtype)
我們再看看matplotlib讀取的圖像是不是NumPy數(shù)組,如下:
可以明顯看到這是ndarray格式,總共三個通道,分別代表RGB。
3.3 matplotlib工具欄
從上面的例子中就可以看到,當(dāng)顯示一張圖片時,菜單欄自動生成了一些按鈕,這些按鈕都有各自的功能。
3.3.1 前進(jìn)后退按鈕
這三個按鈕就像是我們使用的瀏覽器中的主頁和前進(jìn)后退按鈕一樣,一開始這三個圖是沒有什么用的,因為它本來就處于主頁,既不能前進(jìn)也不能后退,當(dāng)你使用平移和縮放功能后,每一次操作就相當(dāng)于在瀏覽器中點(diǎn)開了一個網(wǎng)頁一樣,這時候你就可以使用前進(jìn)后退和回到最開始狀態(tài)的按鈕了。
3.3.2 平移縮放按鈕
這個按鈕也比較簡單,按住鼠標(biāo)左鍵在圖片區(qū)域左右移動可以實(shí)現(xiàn)圖像的左右平移,上下移動就可以使圖像上下平移,按住X或者Y鍵移動即只能在X或者Y方向上平移。同理按住鼠標(biāo)右鍵就是縮放。如果按住Ctrl鍵再進(jìn)行上述操作,則是XY軸成比例平移或縮放。
3.3.3 縮放到指定矩形按鈕
按住鼠標(biāo)左鍵或者右鍵,選定一個矩形區(qū)域,即可將圖形放大或者縮小到制定的矩形區(qū)域中。
在放大局部細(xì)節(jié)圖時經(jīng)常使用。
3.3.4 設(shè)置子圖參數(shù)按鈕
點(diǎn)擊該按鈕可以設(shè)置子繪圖區(qū)域的長度和寬度,還可以設(shè)置各個子圖之間的距離。
3.3.5 保存按鈕
該按鈕可以將圖像保存為png、pdf等格式。
matplotlib的一些基礎(chǔ)知識就介紹到這里,大家一定要多加實(shí)踐,這樣才能更好的掌握。
04
必備的python庫
要想深度學(xué)習(xí)學(xué)的好,必須非常好的掌握python各種庫,這是進(jìn)行深度學(xué)習(xí)的基礎(chǔ)。下面我和大家分享下一些常用的庫,其實(shí)上面我已經(jīng)介紹了兩個了那就是NumPy和matplotlib,還有一些其他的庫,請繼續(xù)往下看。
4.1 科學(xué)計算與數(shù)據(jù)處理庫
說到科學(xué)計算和數(shù)據(jù)處理,我們可能馬上就會想到NumPy但其實(shí)還有兩個其他的庫,那就是SciPy和Pandas。
Scipy在Numpy的基礎(chǔ)上增加了眾多的數(shù)學(xué)計算、科學(xué)計算及工程計算中常用的模塊,例如線性代數(shù)、圖像處理等。在Scipy中的ndimage子模塊就是致力于進(jìn)行圖像處理的。
Pandas是基于NumPy開發(fā),提供了眾多更高級的數(shù)據(jù)處理工能。Pandas中包含許多用于分組,過濾和組合數(shù)據(jù)的內(nèi)置方法,以及時間序列功能。
有機(jī)會我們再說說這兩個庫。
4.2 深度學(xué)習(xí)框架
目前深度學(xué)習(xí)框架已經(jīng)呈百家爭鳴之態(tài)勢,有Caffe、TensorFlow、Pytorch、Keras等等,對于我們來說,不可能都能掌握,但市面上主流的框架我們還是必須要熟練的掌握。
這些深度學(xué)習(xí)框架,我們在公眾號的往期文章已經(jīng)說過大半,大家可以自行翻閱。
4.3 服務(wù)端Flask
Flask是一個微型的服務(wù)端框架,它旨在保持核心的簡單,但同時又易于擴(kuò)展。默認(rèn)情況下,Flask不包含數(shù)據(jù)庫抽象層、表單驗證,或是其他任何已有多種庫可以勝任的功能。然而,Flask 支持用擴(kuò)展來給應(yīng)用添加這些功能。眾多的擴(kuò)展提供了數(shù)據(jù)庫集成、表單驗證、上傳處理、各種各樣的開放認(rèn)證技術(shù)等功能。Flask 的這些特性,使得它在 Web 開發(fā)方面變得非常流行。
4.4 前端urilib等
urllib是Python自帶的標(biāo)準(zhǔn)庫,無需安裝,直接可以用。提供了如下功能:網(wǎng)頁請求、響應(yīng)獲取、代理和cookie設(shè)置、異常處理和URL解析,主要用于前端爬蟲,對于獲取和整理數(shù)據(jù)是必備的。
前后端的這些框架,我們在公眾號的往期文章都已經(jīng)說過,大家可以自行翻閱。
總結(jié)
AI白身境第三講結(jié)束了,但學(xué)習(xí)的路永無止境,python、NumPy、matplotlib、深度學(xué)習(xí)框架的知識還有很多,需要我們不斷的學(xué)習(xí)。期待我們的下期吧。
下期預(yù)告:下一期我們會講圖像基礎(chǔ),如果你有建議,歡迎留言,我們會及時采納的。
轉(zhuǎn)載文章請后臺聯(lián)系
侵權(quán)必究
更多請關(guān)注知乎專欄《有三AI學(xué)院》
往期精選
【AI白身境】深度學(xué)習(xí)從棄用windows開始
【AI白身境】Linux干活三板斧,shell、vim和git
回顧2018,計劃2019
總結(jié)
以上是生活随笔為你收集整理的【AI白身境】学AI必备的python基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【技术综述】图像与CNN发家简史,集齐深
- 下一篇: 【AI白身境】只会用Python?g++