溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Numpy生成ndarray的方法是什么

發(fā)布時(shí)間:2021-12-27 10:45:49 來源:億速云 閱讀:198 作者:iii 欄目:編程語言

這篇文章主要講解了“Numpy生成ndarray的方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Numpy生成ndarray的方法是什么”吧!

什么是Numpy?

Numpy是Python開源的科學(xué)計(jì)算工具包,是高級(jí)的數(shù)值編程工具

  • 強(qiáng)大的N維數(shù)組對(duì)象:ndarray

  • 可以對(duì)數(shù)組結(jié)構(gòu)數(shù)據(jù)進(jìn)行運(yùn)算(不用遍歷循環(huán))

  • 有隨機(jī)數(shù)、線性代數(shù)、傅里葉變換等功能

如何安裝?

安裝anaconda科學(xué)計(jì)算環(huán)境

推薦使用anaconda,里面集成了許多常用的庫(kù),并且在配置環(huán)境時(shí)更容易上手。

下載地址:https://www.anaconda.com/download/


安裝Numpy

方法一:安裝anaconda后,numpy是可以直接使用的,無需二次安裝。

方法二:沒有安裝anaconda可以使用pip install numpy安裝。

安裝jupyter notebooks(推薦使用)

方法一:安裝anaconda后,jupyter notebooks是可以直接使用的,無需二次安裝。

方法二:沒有安裝anaconda可以使用pip install jupyter安裝。

Numpy基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)

導(dǎo)入

推薦使用from numpy import np

不建議使用from numpy import *, 因?yàn)閚umpy中包含了大量與Python內(nèi)建函數(shù)重名的函數(shù)。

生成ndarray

可以使用array生成數(shù)組
舉個(gè)栗子:

import numpy as np
ar = np.array([[1,2,3,4],[1,2,3,4]])
print(ar, type(ar))

>>>
[[1 2 3 4]
  [1 2 3 4]] <class 'numpy.ndarray'>

除了np.array之外還有其他函數(shù)可以創(chuàng)建新數(shù)組,這里列出常用的幾個(gè):

arange # python range的數(shù)組版
asarray # 將輸入轉(zhuǎn)換為ndarray
ones # 根據(jù)給定的形狀和類型生成全1的數(shù)組
ones_like # 根據(jù)給定的數(shù)組生成形狀一樣的全1的數(shù)組
zeros # 根據(jù)給定的形狀和類型生成全0的數(shù)組
zeros_like # 根據(jù)給定的數(shù)組生成形狀一樣的全1的數(shù)組
eye # 生成一個(gè)N*N的特征矩陣(對(duì)角線為1,其余為0)
linspance # 返回在間隔[開始,停止]上計(jì)算的num個(gè)均勻間隔的樣本

這里以zeros,zeros_like以及l(fā)inspance分別舉例:

arr = np.zeros((3,5))
print(arr)

>>>
[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

s = np.array([list(range(10)),list(range(10,20))])
print(s)
print(np.zeros_like(s))

>>>
[[ 0  1  2  3  4  5  6  7  8  9]
  [10 11 12 13 14 15 16 17 18 19]]
[[0 0 0 0 0 0 0 0 0 0]
  [0 0 0 0 0 0 0 0 0 0]]

print(np.linspace(10,20,num = 21)) #在10,21之間生成
print(np.linspace(10,20,num = 21, endpoint = False)) #endpoint默認(rèn)為True,為False時(shí)不包含左邊的值
print(np.linspace(10,20,num = 21, retstep = True))# restep顯示步長(zhǎng)

>>>
[10.  10.5 11.  11.5 12.  12.5 13.  13.5 14.  14.5 15.  15.5 16.  16.5
 17.  17.5 18.  18.5 19.  19.5 20. ]
[10.         10.47619048 10.95238095 11.42857143 11.9047619  12.38095238
 12.85714286 13.33333333 13.80952381 14.28571429 14.76190476 15.23809524
 15.71428571 16.19047619 16.66666667 17.14285714 17.61904762 18.0952381
 18.57142857 19.04761905 19.52380952]
(array([10. , 10.5, 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. ,
       15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5, 20. ]), 0.5)

這里除了常用的幾個(gè)生成數(shù)組的函數(shù)外,列舉一些常用的方法:

import numpy as np
ar = np.array([[1,2,3,4],[1,2,3,4]])
print(ar, type(ar))
print(ar.ndim)#返回?cái)?shù)組的維度的個(gè)數(shù)
print(ar.shape)#數(shù)組的維度,返回幾行幾列
print(ar.size)#數(shù)組元素的個(gè)數(shù)
print(ar.dtype)#元素的類型
print(ar.itemsize)#數(shù)組中元素的大小

>>>
[[1 2 3 4]
 [1 2 3 4]] <class 'numpy.ndarray'>
2
(2, 4)
8
int64
8

Numpy通用函數(shù)

數(shù)組形狀變換(.T/.reshape()/.resize())

.T是轉(zhuǎn)置函數(shù),轉(zhuǎn)置函數(shù)對(duì)一維數(shù)組無影響

# .T
import numpy as np
ar1 = np.arange(10)
ar2 = np.zeros((2,5))
print(ar1.T)
print(ar2.T)#轉(zhuǎn)置函數(shù)

>>>
[0 1 2 3 4 5 6 7 8 9]
[[0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]]

.reshape(),直接更改數(shù)組的形狀,但更改前后數(shù)組元素個(gè)數(shù)必須相同

ar1 = np.arange(10)
print(ar1.reshape(2,5))
print(np.reshape(np.arange(16),(2,8)))

>>>
[[0 1 2 3 4]
 [5 6 7 8 9]]
[[ 0  1  2  3  4  5  6  7]
 [ 8  9 10 11 12 13 14 15]]

.resize()

print(np.resize(np.arange(16),(3,5)))  # resize當(dāng)后面的數(shù)組元素個(gè)數(shù)小于前面生成的數(shù)量時(shí),按照順序迭代
print(np.resize(np.arange(12),(3,5)))  # resize當(dāng)后面的數(shù)組元素個(gè)數(shù)大于前面的生成的數(shù)量,則隨機(jī)填充

>>>
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11  0  1  2]]
數(shù)組的復(fù)制

和python中的深淺拷貝類似:Python | Python學(xué)習(xí)之深淺拷貝

數(shù)組的類型轉(zhuǎn)化

.astype()可以將數(shù)組中元素的類型進(jìn)行轉(zhuǎn)化,在numpy中元素類型有以下幾種(太多了就不都寫了):

int8, uint8 #有符號(hào)和無符號(hào)的8整位整數(shù)
int16, uint16 #有符號(hào)和無符號(hào)的16整位整數(shù)
int32, uint32 #有符號(hào)和無符號(hào)的32整位整數(shù)
int64, uint64 #有符號(hào)和無符號(hào)的64整位整數(shù)
float16 #半精度
float32 #單精度
float64 #雙精度
bool #布爾
.....

舉個(gè)類型轉(zhuǎn)換的栗子:

ar1 = np.arange(10,dtype=float)
ar2 = ar1.astype(np.int64)
print(ar1,ar2)

>>>
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [0 1 2 3 4 5 6 7 8 9]
數(shù)組的堆疊

數(shù)組的堆疊有hstack(),vstack()以及stack(),下面分別舉例:

a = np.arange(10)
b = np.arange(10,20)
print(ar1,ar2)
# 橫向鏈接
print(np.hstack((a,b)))
# 豎向鏈接
a = np.array([[1],[2],[3]])
b = np.array([['a'],['b'],['c']])
print(np.vstack((a,b)))
# 任意堆疊
a = np.arange(10)
b = np.arange(10,20)
print(np.stack((a,b),axis=1)) # 豎向堆疊
print(np.stack((a,b))) # 橫向堆疊

>>>>
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
[['1']
 ['2']
 ['3']
 ['a']
 ['b']
 ['c']]
[[ 0 10]
 [ 1 11]
 [ 2 12]
 [ 3 13]
 [ 4 14]
 [ 5 15]
 [ 6 16]
 [ 7 17]
 [ 8 18]
 [ 9 19]]
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
數(shù)組拆分

數(shù)組拆分同樣分為橫向拆分和豎向拆分。

# 數(shù)組拆分
ar = np.arange(16).reshape(4,4)
print(ar)
print(np.hsplit(ar,2)) #縱向拆分
print(np.vsplit(ar,2)) #橫向拆分

>>>
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
常用計(jì)算函數(shù)

這里的計(jì)算函數(shù)與Python中的計(jì)算函數(shù)用法相同,這里不再過多論述。

#計(jì)算函數(shù)
np.mean() #求平均值
np.max() #最大值
np.min() #最小值
np.gtd() #標(biāo)準(zhǔn)差
np.var() #方差
np.sum() # 其中參數(shù)axis=0按列求和axis=1按行求和

感謝各位的閱讀,以上就是“Numpy生成ndarray的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Numpy生成ndarray的方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI