numpy包成了python科學計算的擴充套件包,在很多多維陣列、大型陣列numpy的使用時最多的。
對於numpy包的使用,最好的了解方式就是通過官網了,
1、在numpy裡,ndarray他是n-demensional array英文的縮寫。他是一種由同質元素組成的多維陣列。元素數量是事先準備好的,同質值得是所有元素型別一致。ndarray資料型別由乙個叫dtype的numpy物件指定,每個ndarray只有一種dtype型別。
陣列的維數和元素數量由陣列的型(shape)來確定,shape由n個正整數組成的元組來指定,元組的每個元素對應每一堆的大小,陣列的堆統稱為軸(axis),軸的數量叫做秩(rank)。
ndarray還有乙個特定就是大小固定,建立ndarray一旦制定了大小,其大小就不會再發生改變,而python列表是可以改變的。
2、定義ndarry
使用array()函式定義,以 python列表作為引數,建立之後列表的元素就是ndarray的元素。
import numpy as np #匯入numpy
a=[1,2,3,4,5,6,7,8,9]
print(a)
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
對於陣列a,我們希望實現將陣列a中的元素擴大為原來的兩倍
a*2
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
但是所得的結果是將陣列a複製了,不是我們想得到的結果。
其原因在於此時的陣列a的型別是列表,我們無法直接相乘,必須先轉換為ndarray型別。
# 檢驗資料型別
print(type(a))
>>> #把普通python中的list轉換成ndarray
a=np.array(a)
print(a)
a>>> [1 2 3 4 5 6 7 8 9]
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(type(a))
>>> a*2
>>> array([ 2, 4, 6, 8, 10, 12, 14, 16, 18])
把型別轉換後,就可以得到我們想要的結果。
屬性描述
ndarray.ndim
檢視陣列的維數
ndarray.shape
檢視陣列有幾行幾列
ndarray.size
檢視陣列中元素個數
ndarray.itemsize
檢視每個元素所佔位元組大小
ndarray.dtype
檢視陣列元素中資料型別
ndarray.data
實際陣列元素的緩衝區位址
ndarray.flat
陣列元素迭代器
#直接建立一維陣列
b=np.array([1,2,3,4])
print(b)
print(type(b))
>>>[1 2 3 4]
#建立n維陣列
c = np.array([[1,2,3],[4,5,6]])
print(c)
print(type(c))
>>> [[1 2 3] [4 5 6]]
print(c.ndim)#有幾個中括號就是幾維
>>>2
print(c.shape)
>>> (2, 3)
print(c.size)
>>> 6
print(c.itemsize)
>>> 4
e = np.array([1,2,3,4,5,6],ndmin = 3) #建立指定的多維陣列
print(e)
>>> [[[1 2 3 4 5 6]]]
f = np.array([1,2,3,4,5,6],ndmin = 3,dtype = np.complex) #建立指定維數以及資料型別的多維陣列
print(f)
>>> [[[1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]]]
可以通過修改陣列的shape屬性,在保持陣列元素個數不變的情況下,改變陣列每個軸的長度。
g = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(g)
>>>
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
print(g.shape)
>>>
(4, 3)
g.shape = 3,4
print(g)
>>>
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
注意:以上從(3,4)改為(4,3)並不是對陣列進行轉置,而只是改變每個軸的大小,陣列元素在記憶體中的位置是沒有改變的。
g.shape = 2,-1
print(g)
>>>
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
以上,當某個軸的元素為-1時,將根據陣列元素的個數自動計算此軸的長度
h = g.reshape(6,2)
print(h)
>>>
[[ 1 2]
[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]]
以上,建立乙個改變尺寸的新陣列,原陣列的shape保持不變。
操作描述
numpy.empty()
隨機建立空陣列
nump.zeros()
返回指定大小的陣列,並且以0作為填充
nump.zeros_like()
返回型別相同的以0作為填充的陣列
nump.eye()
建立對角線為1其餘為0的陣列
nump.arange(i,j,k)
建立從i開始,j結束步長為k的一維陣列,不包括終止值
nump.linspace(i,j,k)
建立乙個i為起始值,j為終止值,元素個數為k的陣列,包括終止值
2 NLP 前置技術解析
nlp 的前置技術 很多的資料科學庫 框架 模組以及工具箱可以有效地實現 nlp 大部分常見的演算法與技術 需要掌握 numpy 正規表示式 python 處理 nlp 的優勢 正規表示式是一種定義了搜尋模式的特徵序列,主要是用於字串的模式匹配,或是字元的匹配。nlp 通常所需要處理的語料,一部分來...
NLP分析技術的三個層面
nlp分析技術大致分為三個層面 詞法分析 句法分析和語義分析。詞法分析包括分詞 詞性標註 命名實體識別和詞義消歧。分詞和詞性標註好理解。命名實體識別的任務是識別句子中的人名 地名和機構名稱等等命名實體。每乙個命名實體都是由乙個或多個詞語構成的。詞義消歧是要根據句子上下文語境來判斷出每乙個或某些詞語的...
實現C 類中對於前置 ,後置 的過載
建立乙個複數類,在類中實現建構函式 析構函式 拷貝構造和運算子過載 在運算子過載的實現過程中,可以發現,前置 和後置 在實現上有區別 由於前置 是先實現 再進行使用,所以在實現過程中比較簡單 而後置 需要先使用,再進行 操作 在以下程式中,實現了幾個預設成員函式和前置 與後置 include usi...