NLP前置技術 Numpy的實現

2021-09-27 03:03:08 字數 3229 閱讀 2268

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...