Numpy基礎 陣列與向量化計算

2021-09-01 15:12:54 字數 4423 閱讀 1343

一、多維陣列

1、生成ndarray     (array函式)   

1、np.array()

import numpy as np

data1=[6,7.5,8,0,1]     #建立簡單的列表

print(data1)

arr1=np.array(data1)    #將列表轉化為陣列

print(arr1)

2、ndarry的資料型別

(1)dtype()

data=np.random.randn(2,3)  #生成隨機數組

print(data)

print(data.shape)

print(data.dtype)

(2)轉化陣列的資料型別:astype()

(3)astype生成乙個新的陣列

arr=np.array([1,2,3,4,5])

print(arr.dtype)

float_arr=arr.astype(np.float64)   #轉換陣列的資料型別

print(float_arr.dtype)

3、numpy陣列算術

(1)逐元素操作

arr=np.array([[1.,2.,3.],[4.,5.,6.]])

print(arr)

print(arr*arr)

4、索引與切片

(1)基礎索引與切片

arr=np.arange(10)

print(arr)

print(arr[5:8])

arr[5:8]=12

print(arr)

(2)布林索引

names=np.array(["bob","joe","will","bob","will","joe","joe",])

print(names=="bob")

5、陣列轉置與換軸

(1)arr.t

(2)內積:np.dot()     x.dot()等價於np.dot(x,y)

arr=np.random.randn(6,3)

print(arr)

print(arr.t)

print(np.dot(arr.t,arr))

(3)換軸:transpose()

arr=np.arrange(16).reshape((2,2,6))

arr.transpose((1,0,2))         #將第二個軸和第乙個軸變換位置

二、函式

1、一元通用函式

(1)平方根  sqrt()

arr=np.arange(10)

print(arr)

print(np.sqrt(arr))

(2)自然指數值  exp()

print(np.exp(arr))

(3)返回陣列的小數部分和整數部分  modf()

arr=np.random.randn(7)*5

print(arr)

remainder,whole_part=np.modf(arr)

print(remainder)

print(whole_part)

2、二元通用函式

(1)、最大值  maximum()

x=np.random.randn(8)

print(x)

y=np.random.randn(8)

print(y)

print(np.maximum(x,y))

3、矩陣分解的標準函式集

(1)、numpy.linalg()

(1.1)、方陣的逆矩陣  inv()

(1.2)、qr分解  qr()

from numpy.linalg import inv,qr

x=np.random.randn(5,5)

print(x)

mat=x.t.dot(x) #內積

print(inv(mat))  #求逆

q,r=qr(mat)

print(r)

4、隨機數生成器

numpy.random()

三、陣列程式設計

1、將條件邏輯作為陣列操作  where()

xarr=np.array([1.1,1.2,1.3,1.4,1.5])

yarr=np.array([2.1,2.2,2.3,2.4,2.5])

cond=np.array([true,false,true,true,false])      #是否是x的值

result=np.where(cond,xarr,yarr)

print(result)               #result([1.1,2.2,1.3,1.4,2.5])

2、數學和統計方法   mean()、sum()、cumsum()   #從0元素來累計和、cumprod()  # 從1元素來累計積

arr=np.random.randn(5,4)

print(arr)

print(arr.mean())      #取總均值

print(np.mean(arr))

print(arr.mean(axis=1))    #按列數取均值

print(arr.mean(1))

3、布林值陣列的方法   any()   all()

print(arr.sum(0))         #從0元素來是加總

arr=np.array([[0,1,2],[3,4,5],[6,7,8]])

print(arr)

print(arr.cumsum(axis=0))    #axis=0行數加總

print(arr.cumprod(axis=1))     #axis=1列數加總

bools=np.array([false,false,true,false])

print(bools.any())   #至少有乙個

print(bools.all())     #全部都是

4、計算唯一值並排序:unique()

ints=np.array([3,3,3,2,2,1,1,4,4])

print(np.unique(ints))   #唯一值

html超文字標記語言

定義:超文字標記語言,標準通用標記語言下的乙個應用。 「超文字」就是指頁面內可以包含、鏈結,甚至**、程式等非文字元素。 超文字標記語言的結構包括「頭」部分(英語:head)、和「主體」部分(英語:body),其中「頭」部提供關於網頁的資訊,「主體」部分提供網頁的具體內容。

整體結構:

乙個網頁對應於乙個html檔案,html檔案以.htm或.html為副檔名。可以使用任何能夠生成txt型別原始檔的文字編輯來產生html檔案。 標準的html檔案都具有乙個基本的整體結構,即html檔案的開頭與結尾標誌和html的頭部與實體2大部分。有3個雙標記符用於頁面整體結構的確認。

使用:每種html標記符在使用中可帶有不同的屬性項,用於描述該標記符說明的內容顯示不同的效果。正文標記符中提供以下屬性來改變文字的顏色及頁面背景。

bgcolor 用於定義網頁的背景色

background 用於定義網頁背景圖案的影象檔案

text 用於定義正文本元的顏色,預設為黑色

link 用於定義網頁中超級鏈結字元的顏色,預設為藍色

vlink 用於定義網頁中已被訪問過的超接鏈結字元的顏色,預設為紫紅色

alink 用於定義被滑鼠選中,但未使用時超鏈字元的顏色,預設為紅色

例如:標記將定義頁面的背景色為黑色,正文本型顯示為白色。

以上屬性使用中,需要對顏色進行說明,在html中對顏色可使用2種方法說明顏色屬性值,即顏色名稱(英文名)和顏色值。其中顏色值用6個十六進製制數來分別描述紅、綠 、藍三原色的配方法——稱為rgb值,每2個十六進製制數表示一種顏色。使用顏色值時,應在值前冠以「#」號。

使用圖案代替背景顏色,可以使頁面更生動、美觀。例如:

可將影象檔案image.gif所表示的一幅影象作為頁面的背景,若影象幅面不夠大,將會將影象重複平鋪在視窗中。

爬蟲

傳統爬蟲從乙個或若干初始網頁的url開始,獲得初始網頁上的url,在抓取網頁的過程中,不斷從當前頁面上抽取新的url放入佇列,直到滿足系統的一定停止條件。通俗的講,也就是通過原始碼解析來獲得想要的內容。

聚焦爬蟲的工作流程較為複雜,需要根據一定的網頁分析演算法過濾與主題無關的鏈結,保留有用的鏈結並將其放入等待抓取的url佇列。然後,它將根據一定的搜尋策略從佇列中選擇下一步要抓取的網頁url,並重複上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,並建立索引,以便之後的查詢和檢索;對於聚焦爬蟲來說,這一過程所得到的分析結果還可能對以後的抓取過程給出反饋和指導。

防爬蟲:ks-waf將爬蟲行為分為搜尋引擎爬蟲及掃瞄程式爬蟲,可遮蔽特定的搜尋引擎爬蟲節省頻寬和效能,也可遮蔽掃瞄程式爬蟲,避免**被惡意抓取頁面。[1]

Numpy 向量化運算

1.numpy array與python list 相同點 可以通過索引獲取元素。遍歷 for x in a 不同點 numpy陣列中各元素都屬於同一型別。numpy擁有很多可以使用的函式,如mean std numpy陣列可以是多維的。2.運算 a np.array 1,2,3,4 b np.ar...

機器學習 numpy向量化程式設計

numpy 提供了專門的矩陣資料結構和線性代數庫,完全實現了向量化程式設計 import numpy as np from numpy import mylist 1,2,3,4,5 a 10 mymatrix np.mat mylist print a mymatrix 輸出結果為 10 20 3...

ArrayFire 向量化陣列 2

在程式設計中我們經常會合併某個矩陣,通常我們會使用迴圈來實現,然而迴圈有時候會降低程式執行的效率,所以利用arrayfire中的向量的平坦模式,我們可以利用空間來換取時間。主要的思路是 1.我們將m n的矩陣展開成乙個1 m n 或者 m n 1的向量 2.同理我們將p q的矩陣展開成乙個1 p q...