成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python的numpy模塊是什么及怎么用

今天小編給大家分享一下python的numpy模塊是什么及怎么用的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

站在用戶的角度思考問題,與客戶深入溝通,找到樂清網(wǎng)站設(shè)計與樂清網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋樂清地區(qū)。

python的numpy模塊是什么及怎么用

       Numpy是Numerical Python extensions的縮寫,字面意思是Python數(shù)值計算擴展。Numpy是python中眾多機器學(xué)習庫的依賴,這些庫通過Numpy實現(xiàn)基本的矩陣計算。

       Numpy支持高階、大量計算的矩陣、向量計算,與此同時還提供了較為豐富的函數(shù)。此外,Numpy基于更加現(xiàn)代化的編程語言--python,python憑借著開源、免費、靈活性、簡單易學(xué)、工程特性好等特點風靡技術(shù)圈,已經(jīng)成為機器學(xué)習、數(shù)據(jù)分析等領(lǐng)域的主流編程語言。

一、array類型

numpy的array類型是該庫的一個基本數(shù)據(jù)類型,這個數(shù)據(jù)類型從字面上看是數(shù)組的意思,也就意味著它最關(guān)鍵的屬性是元素與維度,我們可以用這個數(shù)據(jù)類型來實現(xiàn)多維數(shù)組。

因此,通過這個數(shù)據(jù)類型,我們可以使用一維數(shù)組來表示向量,二維數(shù)組表示矩陣,并以此類推以用來表示更高維度的張量。

1.1array類型的基本使用

import numpy as np
# 通過np.array()方法創(chuàng)建一個名為array的array類型,參數(shù)是一個list
array = np.array([1, 2, 3, 4])
print(array)
# 結(jié)果為:[1 2 3 4]

# 獲取array中元素的最大值
print(array.max())
# 結(jié)果為:4

# 獲取array中元素的最小值
print(array.min())
# 結(jié)果為:1

# 獲取array中元素的平均值
print(array.mean())
# 結(jié)果為:2.5

# 直接將array乘以2,python將每個元素都乘以2
print(array*2)
# 結(jié)果為:[2 4 6 8]

print(array+1)
# 結(jié)果為:[2 3 4 5]

print(array/2)
# 結(jié)果為:[0.5 1.  1.5 2. ]

# 將每一個元素都除以2,得到浮點數(shù)表示的結(jié)果
print(array % 2)
# 結(jié)果為:[1 0 1 0]

array_1 = np.array([1, 0, 2, 0])
# 獲取該組數(shù)據(jù)中元素值最大的那個數(shù)據(jù)的首個索引,下標從0開始
print(array_1.argmax())
# 結(jié)果為:2

通過上面的代碼,我們可以了解到Numpy中array類型的基本使用方法。

我們可以看到,array其實是一個類,通過傳入一個list參數(shù)來實例化為一個對象,從而實現(xiàn)了對數(shù)據(jù)的封裝。


1.2對更高維度數(shù)據(jù)的處理

import numpy as np
# 創(chuàng)建一個二維數(shù)組,用以表示一個3行2列的矩陣
array = np.array([[1, 2], [3, 4], [5, 6]])
print(array)

# 查看數(shù)據(jù)的維度屬性,下面輸出結(jié)果(3,2)表示3行2列
print(array.shape)
# 結(jié)果為:(3, 2)

# 查看元素個數(shù)
print(array.size)
# 結(jié)果為:6

# 查看元素最大值的索引
print(array.argmax())
# 結(jié)果為:5

# 將shape為(3,2)的array轉(zhuǎn)換為一行表示
print(array.flatten())
# 結(jié)果為:[1 2 3 4 5 6]
# 我們可以看到,flatten()方法是將多維數(shù)據(jù)“壓平”為一維數(shù)組的過程

#將array數(shù)據(jù)從shape為(3,2)的形式轉(zhuǎn)為(2,3)的形式
print(array.reshape(2, 3))
'''結(jié)果為:
[[1 2 3]
 [4 5 6]]'''

#將array數(shù)據(jù)從shape為(3,2)的形式轉(zhuǎn)為(1,6)的形式
print(array.reshape(1, 6))
# 結(jié)果為:[[1 2 3 4 5 6]]

高級一點的就是flatten()和reshape()函數(shù)了,需要注意下reshape()返回的結(jié)果是array類型


1.3Numpy創(chuàng)建特殊類型的array類型

1.3.1生成全為0或全為1的array

import numpy as np
# 生成所有元素為
array_zeros = np.zeros((2, 3, 3))
print(array_zeros)
'''結(jié)果為:
[[[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]]
'''
array_ones = np.ones((2, 3, 3))
print(array_ones)
'''結(jié)果為:
[[[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]]
'''
print(array_ones.shape)
# 結(jié)果為:(2, 3, 3)

注意:如果將(2,3,3)改為(3,3)

array_zeros = np.zeros((3, 3))
print(array_zeros)
'''結(jié)果為:
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
'''

其生成的是3行3列的array


1.3.2np.arrange()和np.linspace()

arange([start,] stop[, step,], dtype=None, , like=None)

返回給定間隔內(nèi)均勻分布的值。值在半開區(qū)間``[start, stop)``(換句話說,包括`start`但不包括`stop`的區(qū)間)內(nèi)生成。對于整數(shù)參數(shù),該函數(shù)等效于 Python 內(nèi)置的 `range` 函數(shù),但返回的是 ndarray 而不是列表。當使用非整數(shù)步長(例如 0.1)時,結(jié)果通常會不一致。對于這些情況,最好使用 `numpy.linspace`。

linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

在指定的時間間隔內(nèi)返回均勻分布的數(shù)字。返回“num”個均勻分布的樣本,在區(qū)間 [`start`, `stop`] 上計算。

start:序列的起始值。

stop:序列的結(jié)束值,除非 `endpoint` 設(shè)置為 False。在這種情況下,序列由除最后一個“num + 1”個均勻分布的樣本之外的所有樣本組成,因此排除了“stop”。請注意,當 `endpoint` 為 False 時,步長會發(fā)生變化。

num=50:要生成的樣本數(shù)。默認值為 50。必須為非負數(shù)。

endpoint=True:如果為真,`stop` 是最后一個樣本。否則,不包括在內(nèi)。默認為真。

retstep=False:如果為 True,則返回 (`samples`, `step`),其中 `step` 是樣本之間的間距。

dtype=None:輸出數(shù)組的類型。如果 `dtype` 沒有給出,數(shù)據(jù)類型是從 `start` 和 `stop` 推斷出來的。推斷的 dtype 永遠不會是整數(shù);即使參數(shù)會產(chǎn)生一個整數(shù)數(shù)組,也會選擇`float`。

因此以下代碼就很容易理解了

# 生成一個array,從0遞增到10,步長為1
array_arange = np.arange(10)
print(array_arange)
# 結(jié)果為:[0 1 2 3 4 5 6 7 8 9]

# 生成一個array,從0遞增到10,步長為2
array_arange_1 = np.arange(0, 10, 2)
print(array_arange_1)
# 結(jié)果為:[0 2 4 6 8]

# 生成一個array,將0-10等分為5部分
array_linspace = np.linspace(0, 10, 5)
print(array_linspace)
# 結(jié)果為:[ 0.   2.5  5.   7.5 10. ]

1.4Numpy基礎(chǔ)計算演示

import numpy as np
# 取絕對值
print(np.abs([1, -2, 3, -4]))
# [1 2 3 4]

# 求正弦值
print(np.sin(np.pi/2))
# 1.0

# 求反正切值
print(np.arctan(1))
# 0.7853981633974483

# 求e的2次方
print(np.exp(2))
# 7.38905609893065

# 求2的三次方
print(np.power(2, 3))
# 8

# 求向量[1,2]與[3,4]的點積
print(np.dot([1, 2], [3, 4]))
# 11

# 求開方
print(np.sqrt(4))
# 2.0

# 求和
print(np.sum([1, 2, 3, 4]))
# 10

# 求平均值
print(np.mean([1, 2, 3, 4]))
#2.5 

# 求標準差
print(np.std([1, 2, 3, 4]))
# 1.118033988749895

二、線性代數(shù)相關(guān)

前面我們已經(jīng)了解到array類型及其基本操作方法,了解array類型可以表示向量、矩陣和多維張量。

線性代數(shù)計算在科學(xué)計算領(lǐng)域中非常重要,因此接下來了解以下Numpy提供的線性代數(shù)操作

import numpy as np

vector_a = np.array([1, 2, 3])
vector_b = np.array([2, 3, 4])
# 定義兩入向量vector_a與vector_b

m = np.dot(vector_a, vector_b)
# 將兩個向量相乘,在這里也就是點乘,結(jié)果為20
print(m)

n = vector_a.dot(vector_b)
print(n)
# 將vector_a與vector_b相乘,結(jié)果為20
o = np.dot(vector_a, vector_b.T)
print(o)

'''
將一個行向量與一個列向量叉乘的結(jié)果相當于將兩個行向量求點積,這里測試了dot()方法。其中array類型的T()方法表示轉(zhuǎn)置。
測試結(jié)果表明:
dot()方法默認對兩個向量求點積。對于符合叉乘格式的矩陣,自動進行又乘。'''

# 我們看一下下面這個例子:

matrix_a = np.array([[1, 2], [3, 4]])
# 定義一個2行2列的方陣

matrix_b = np.dot (matrix_a, matrix_a.T)
# 這里將該方陣與其轉(zhuǎn)置叉乘,將結(jié)果賦予matrix_b變量
print(matrix_b)
'''結(jié)果為:
array([[5,11],
[11,25]])'''

p = np.linalg.norm([1, 2])
print(p)
# 求一個向量的范數(shù)的值,結(jié)果為2.2360679774997898
# 如果norm()方法沒有指定第2個參數(shù),則默認為求2范數(shù)

np.linalg.norm([1, -2], 1)
# 指定第2個參數(shù)值為1,即求1范數(shù)。我們在前面介紹過,1范數(shù)的結(jié)果為向量中各元素絕對值之和,結(jié)果為3.0

q = np.linalg.norm([1, 2, 3, 4], np. inf)
print(q)
# 求向量的無窮范數(shù),其中np.inf表示正無窮,也就是向量中元素值最大的那個,其結(jié)果為4.0

r = np.linalg .norm([1, 2, 3, 4], -np.inf)
print(r)
# 同理,求負無窮范數(shù)的結(jié)果為1, 也就是向量中元素的最小值

# 求行列式
s = np.linalg.det(matrix_a)
print(s)
# -2.0000000000000004

t = np.trace(matrix_a)
print(t)
# 求矩陣matrix_a的跡,結(jié)果為5

u = np.linalg.matrix_rank(matrix_a)
# 求矩陣的秩,結(jié)果為2
print(u)

v = vector_a * vector_b
# 使用*符號將兩個向量相乘,是將兩個向量中的元素分別相乘,也就是我們所講到的哈達馬乘積
print(v)
# [ 2  6 12]

w = vector_a ** vector_b
print(w)
# 使用二元運算符**對兩個向量進行操作,結(jié)果為array([1, 8, 81],dtype = int32)
# 表示將向量vector. a中元素對應(yīng)vector. b中的元素值求冪運算。例如最終結(jié)果[1,8,81]可以表示為[1*1,2*2*2,3*3*3*3]

# 求逆矩陣
z = np.linalg.inv(matrix_a)
print(z)
'''
[[-2.   1. ]
 [ 1.5 -0.5]]'''

三、矩陣的高級函數(shù)-隨機數(shù)矩陣

Numpy除了為我們提供常規(guī)的數(shù)學(xué)計算函數(shù)和矩陣相關(guān)操作之外,還提供很多功能豐富的模塊,隨機數(shù)模塊就是其中一部分。

利用隨機數(shù)模塊可以生成隨機數(shù)矩陣,比python自帶的隨機數(shù)模塊功能還要強大。

import numpy as np
# 設(shè)置隨機數(shù)種子
np.random.seed()

# 從[1,3)中生成一個整型的隨機數(shù),連續(xù)生成10個
a = np.random.randint(1, 3, 10)
print(a)
# [1 1 1 2 1 1 1 1 2 2]

# 若要連續(xù)產(chǎn)生[1,3}之間的浮點數(shù),可以使用以下方法:
# ①
b = 2*np.random.random(10)+1
print(b)
'''
[2.88458839 2.07004167 2.80814156 1.83247535 2.33649809 2.62763357
 2.0549351  2.33464915 1.70562208 2.66257726]'''
# ②
c = np.random.uniform(1, 3, 10)
print(c)
'''
[1.76967412 1.37703868 2.48838004 1.45986254 2.04487418 2.51107658
 1.25673115 1.31416097 2.56218317 2.90575438]'''

# 生成一個滿足正態(tài)分布(高斯分布)的矩陣,其維度是4*4
d = np. random.normal(size=(4, 4))
print(d)
'''
[[ 0.76164366  0.11588368  0.49221559 -0.28222691]
 [ 0.47638143 -0.21197541 -1.0776362   0.49241666]
 [ 0.26038756 -0.20406522  1.11210954 -1.191425  ]
 [ 0.58255677  1.84047863 -0.21366512 -0.85425828]]'''

# 隨機產(chǎn)生10個n=5、p=0.5的二項分布數(shù)據(jù):
e = np.random.binomial(n=5, p=0.5, size=10)
print(e)
# [1 1 5 2 1 2 1 2 1 2]

# 產(chǎn)生一個0到9的序列
data = np.arange(10)
print(data)
# [0 1 2 3 4 5 6 7 8 9]

# 從data數(shù)據(jù)中隨機采集5個樣本,采集過程是有放回的
f = np.random.choice(data, 5)
print(f)
# [1 7 3 3 4]

# 從data數(shù)據(jù)中隨機采集5個樣本,采集過程是沒有放回的
g = np.random.choice(data, 5, replace=False)
print(g)
# [8 9 1 5 0]

# 對data進行亂序
h = np.random.permutation(data)
print(h)
# [8 5 3 9 2 0 4 6 1 7]

# 對data進行亂序,并替換為新的data
np.random.shuffle(data)
print(data)
# [9 7 0 3 8 5 2 1 4 6]

以上就是“python的numpy模塊是什么及怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標題:python的numpy模塊是什么及怎么用
本文路徑:http://jinyejixie.com/article10/jjhogo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機動態(tài)網(wǎng)站、品牌網(wǎng)站制作定制網(wǎng)站、面包屑導(dǎo)航、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
双城市| 双辽市| 闻喜县| 和平县| 青岛市| 土默特左旗| 正镶白旗| 壤塘县| 罗江县| 喀什市| 满洲里市| 凤城市| 互助| 威远县| 崇义县| 辽阳市| 鲁甸县| 滕州市| 富蕴县| 曲松县| 锡林郭勒盟| 平顺县| 新乡县| 托里县| 杭锦后旗| 金堂县| 玉树县| 清苑县| 浦城县| 阳新县| 贵定县| 大理市| 囊谦县| 渭源县| 阿拉善盟| 南投市| 正宁县| 阿拉善右旗| 罗田县| 昭通市| 崇信县|