国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

NumPy數(shù)組基本用法

這篇具有很好參考價(jià)值的文章主要介紹了NumPy數(shù)組基本用法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

什么是NumPy?

  1. Numpy是Python科學(xué)計(jì)算庫(kù),用于快速處理任意維度的數(shù)組。
  2. NumPy提供一個(gè)N維數(shù)組類型ndarray,它描述了相同類型的“items”的集合。
  3. numpy.ndarray支持向量化運(yùn)算。
  4. NumPy使用c語(yǔ)言寫的,底部解除了GIL,其對(duì)數(shù)組的操作速度不在受python解釋器限制。

NumPy和python中的列表有什么區(qū)別?

  1. python一個(gè)列表中可以存儲(chǔ)多種數(shù)據(jù)類型。比如a = [1,‘a(chǎn)’]是允許的,而NumPy中的數(shù)組只能存儲(chǔ)同種數(shù)據(jù)類型。
  2. NumPy中的數(shù)組可以是多維的,當(dāng)多維數(shù)組中所有的數(shù)據(jù)都是數(shù)值類型的時(shí)候,相當(dāng)于線性代數(shù)中的矩陣,是可以進(jìn)行相互間的運(yùn)算的。

如何創(chuàng)建一個(gè)NumPy數(shù)組?

  1. 根據(jù)Python中的列表生成:
import numpy as np
a1 = np.array([1,2,3,4])
print(a1)
  1. 使用np.arange生成,np.arange的用法類似于Python中的range:
import numpy as np
a2 = np.arange(2,21,2)
print(a2)

(arrange中前兩個(gè)參數(shù)代表列表的區(qū)間,第三個(gè)參數(shù)代表步長(zhǎng),即兩個(gè)相鄰元素之間的差值)

  1. 使用np.random生成隨機(jī)數(shù)的數(shù)組:
a1 = np.random.random(2,2) # 生成2行2列的隨機(jī)數(shù)的數(shù)組,元素大小在0-1之間
a2 = np.random.randint(0,10,size=(3,3)) # 元素是從0-10之間隨機(jī)的3行3列的數(shù)組
  1. 使用函數(shù)生成特殊的數(shù)組:
import numpy as np
a1 = np.zeros((2,2)) #生成一個(gè)所有元素都是0的2行2列的數(shù)組
a2 = np.ones((3,2)) #生成一個(gè)所有元素都是1的3行2列的數(shù)組
a3 = np.full((2,2),8) #生成一個(gè)所有元素都是8的2行2列的數(shù)組
a4 = np.eye(3) #生成一個(gè)對(duì)角矩陣,對(duì)角線上的元素全為1,其他元素都為0的3x3的矩陣

5. ndarray常用屬性:

ndarray.dtype:

NumPy數(shù)組基本用法

  1. 默認(rèn)的數(shù)據(jù)類型:
import numpy as np
a1 = np.array([1,2,3])
print(a1.dtype) 
# 如果是windows系統(tǒng),默認(rèn)是int32
# 如果是mac或者linux系統(tǒng),則根據(jù)系統(tǒng)來(lái)
  1. 指定dtype
import numpy as np
a1 = np.array([1,2,3],dtype=np.int64)
# 或者 a1 = np.array([1,2,3],dtype="i8")
print(a1.dtype)
  1. 修改dtype:
import numpy as np
a1 = np.array([1,2,3])
print(a1.dtype) # window系統(tǒng)下默認(rèn)是int32
# 以下修改dtype
a2 = a1.astype(np.int64) # astype不會(huì)修改數(shù)組本身,而是會(huì)將修改后的結(jié)果返回
print(a2.dtype)

ndarray.size:
獲取數(shù)組中總的元素的個(gè)數(shù)

 import numpy as np
   a1 = np.array([[1,2,3],[4,5,6]])
   print(a1.size) #打印的是6,因?yàn)榭偣灿?個(gè)元素

ndarray.ndim:
獲取數(shù)組的維度

a1 = np.array([1,2,3])
   print(a1.ndim) # 維度為1
   a2 = np.array([[1,2,3],[4,5,6]])
   print(a2.ndim) # 維度為2
   a3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
   print(a3.ndim) # 維度為3

ndarray.shape:
獲取數(shù)組某一維度對(duì)應(yīng)的元組

a1 = np.array([1,2,3])
   print(a1.shape) # 輸出(3,),意思是一維數(shù)組,有3個(gè)數(shù)據(jù)

   a2 = np.array([[1,2,3],[4,5,6]])
   print(a2.shape) # 輸出(2,3),意思是二位數(shù)組,2行3列

   a3 = np.array([
       [
           [1,2,3],
           [4,5,6]
       ],
       [
           [7,8,9],
           [10,11,12]
       ]
   ])
   print(a3.shape) # 輸出(2,2,3),意思是三維數(shù)組,總共有2個(gè)元素,每個(gè)元素是2行3列的

   a44 = np.array([1,2,3],[4,5])
   print(a4.shape) # 輸出(2,),意思是a4是一個(gè)一維數(shù)組,總共有2列
   print(a4) # 輸出[list([1, 2, 3]) list([4, 5])],其中最外面層是數(shù)組,里面是Python列表

ndarray.reshape
修改數(shù)組維度

a1 = np.arange(12) #生成一個(gè)有12個(gè)數(shù)據(jù)的一維數(shù)組
   print(a1) 

   a2 = a1.reshape((3,4)) #變成一個(gè)2維數(shù)組,是3行4列的
   print(a2)

   a3 = a1.reshape((2,3,2)) #變成一個(gè)3維數(shù)組,總共有2塊,每一塊是2行2列的
   print(a3)

   a4 = a2.reshape((12,)) # 將a2的二維數(shù)組重新變成一個(gè)12列的1維數(shù)組
   print(a4)

   a5 = a2.flatten() # 不管a2是幾維數(shù)組,都將他變成一個(gè)一維數(shù)組
   print(a5)

注意,reshape并不會(huì)修改原來(lái)數(shù)組本身,而是會(huì)將修改后的結(jié)果返回。如果想要直接修改數(shù)組本身,那么可以使用resize來(lái)替代reshape。
ndarray.itemsize:
返回?cái)?shù)組中每個(gè)元素所占字節(jié)的大小

a1 = np.array([1,2,3],dtype=np.int32)
   print(a1.itemsize) # 打印4,因?yàn)槊總€(gè)字節(jié)是8位,32位/8=4個(gè)字節(jié)

**

NumPy數(shù)組形狀的操作

**
reshape和resize方法:
兩個(gè)方法都是用來(lái)修改數(shù)組形狀的,但是有一些不同:調(diào)用resize()相當(dāng)于C里面的引用,會(huì)導(dǎo)致原數(shù)組隨之改變

  1. reshape是將數(shù)組轉(zhuǎn)換成指定的形狀,然后返回轉(zhuǎn)換后的結(jié)果,對(duì)于原數(shù)組的形狀是不會(huì)發(fā)生改變的。調(diào)用方式:
a1 = np.random.randint(0,10,size=(3,4))
a2 = a1.reshape((2,6)) #將修改后的結(jié)果返回,不會(huì)影響原數(shù)組本身
  1. resize是將數(shù)組轉(zhuǎn)換成指定的形狀,會(huì)直接修改數(shù)組本身。并不會(huì)返回任何值。調(diào)用方式:
a1 = np.random.randint(0,10,size=(3,4))
a1.resize((2,6)) #a1本身發(fā)生了改變

flatten和ravel方法:

  1. flatten是將數(shù)組轉(zhuǎn)換為一維數(shù)組后,然后將這個(gè)拷貝返回回去,所以后續(xù)對(duì)這個(gè)返回值進(jìn)行修改不會(huì)影響之前的數(shù)組。
  2. ravel是將數(shù)組轉(zhuǎn)換為一維數(shù)組后,將這個(gè)視圖(可以理解為引用)返回回去,所以后續(xù)對(duì)這個(gè)返回值進(jìn)行修改會(huì)影響之前的數(shù)組。
x = np.array([[1, 2], [3, 4]])
x.flatten()[1] = 100 #此時(shí)的x[0]的位置元素還是1
x.ravel()[1] = 100 #此時(shí)x[0]的位置元素是100

**

不同數(shù)組的組合

**
vstack:
將數(shù)組按垂直方向進(jìn)行疊加。數(shù)組的列數(shù)必須相同才能疊加。

a1 = np.random.randint(0,10,size=(3,5))
a2 = np.random.randint(0,10,size=(1,5))
a3 = np.vstack([a1,a2])

hstack:
將數(shù)組按水平方向進(jìn)行疊加。

a1 = np.random.randint(0,10,size=(3,2))
a2 = np.random.randint(0,10,size=(3,1))
a3 = np.hstack([a1,a2])

concatenate([],axis):
將兩個(gè)數(shù)組進(jìn)行疊加,但是具體是按水平方向還是按垂直方向。則要看axis的參數(shù),如果axis=0,那么代表的是往垂直方向(一行一行的)疊加,如果axis=1,那么代表的是往水平方向(一列一列的)上疊加,如果axis=None,那么會(huì)將兩個(gè)數(shù)組組合成一個(gè)一維數(shù)組。需要注意的是,如果往水平方向上疊加,那么行必須相同,如果是往垂直方向疊加,那么列必須相同。

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
# 結(jié)果:
array([[1, 2],
    [3, 4],
    [5, 6]])

np.concatenate((a, b.T), axis=1)
# 結(jié)果:
array([[1, 2, 5],
    [3, 4, 6]])

np.concatenate((a, b), axis=None)
# 結(jié)果:
array([1, 2, 3, 4, 5, 6])

**

數(shù)組的切割:

**
hsplit:
在垂直方向進(jìn)行切割。用于指定分割成幾列,可以使用數(shù)字來(lái)代表分成幾部分,也可以使用數(shù)組來(lái)代表分割的地方

a1 = np.arange(16.0).reshape(4, 4)
np.hsplit(a1,2) #分割成兩部分,把第0,1列和第3,4列分割開
>>> array([[ 0.,  1.],
     [ 4.,  5.],
     [ 8.,  9.],
     [12., 13.]]), array([[ 2.,  3.],
     [ 6.,  7.],
     [10., 11.],
     [14., 15.]])]

np.hsplit(a1,[1,2]) #代表在下標(biāo)為1的地方切一刀,下標(biāo)為2的地方切一刀,分成三部分
>>> [array([[ 0.],
     [ 4.],
     [ 8.],
     [12.]]), array([[ 1.],
     [ 5.],
     [ 9.],
     [13.]]), array([[ 2.,  3.],
     [ 6.,  7.],
     [10., 11.],
     [14., 15.]])]

vsplit:
在水平方向進(jìn)行切割。用于指定分割成幾行,可以使用數(shù)字來(lái)代表分成幾部分,也可以使用數(shù)組來(lái)代表分割的地方

np.vsplit(x,2) #代表按照行總共分成2個(gè)數(shù)組
>>> [array([[0., 1., 2., 3.],
     [4., 5., 6., 7.]]), array([[ 8.,  9., 10., 11.],
     [12., 13., 14., 15.]])]

np.vsplit(x,(1,2)) #代表按照行進(jìn)行劃分,在下標(biāo)為1的地方和下標(biāo)為2的地方分割
>>> [array([[0., 1., 2., 3.]]),
    array([[4., 5., 6., 7.]]),
    array([[ 8.,  9., 10., 11.],
           [12., 13., 14., 15.]])]

plit/array_split(array,indicate_or_seciont,axis)
用于指定切割方式,在切割的時(shí)候需要指定是按照行還是按照列,axis=1代表按照列,axis=0代表按照行。

np.array_split(x,2,axis=0) #按照垂直方向切割成2部分
>>> [array([[0., 1., 2., 3.],
     [4., 5., 6., 7.]]), array([[ 8.,  9., 10., 11.],
     [12., 13., 14., 15.]])]

數(shù)組(矩陣)轉(zhuǎn)置和軸對(duì)換:

numpy中的數(shù)組其實(shí)就是線性代數(shù)中的矩陣。ndarray有一個(gè)T屬性,可以返回這個(gè)數(shù)組的轉(zhuǎn)置的結(jié)果。

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.T
print(a2)

另外還有一個(gè)方法叫做transpose,這個(gè)方法返回的是一個(gè)View,也即修改返回值(即引用),會(huì)影響到原來(lái)數(shù)組

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.transpose()

索引和切片:

  1. 獲取某行的數(shù)據(jù)
# 如果是一維數(shù)組
 a1 = np.arange(0,29)
 print(a1[1]) #獲取下標(biāo)為1的元素
#如果是二維數(shù)組
 a1 = np.arange(0,24).reshape((4,6))
 print(a1[1]) #獲取下標(biāo)為1的行的數(shù)據(jù)
  1. 獲取某行某列的數(shù)據(jù)
a1 = np.arange(0,24).reshape((4,6))
 print(a1[1,1]) #獲取1行1列的數(shù)據(jù)

 print(a1[0:2,0:2]) #獲取0-1行的0-1列的數(shù)據(jù)(左閉右開)
 print(a1[[1,2],[2,3]]) #獲取(1,2)和(2,3)的兩個(gè)數(shù)據(jù),這也叫花式索引

布爾索引:

a1 = np.arange(0,24).reshape((4,6))
print(a1<10) #會(huì)返回一個(gè)新的數(shù)組,這個(gè)數(shù)組中的值全部都是bool類型
> [[ True  True  True  True  True  True]
 [ True  True  True  True False False]
 [False False False False False False]
 [False False False False False False]]

將a1數(shù)組中所有小于10的數(shù)據(jù)全部都提取出來(lái)。那么可以使用以下方式實(shí)現(xiàn):

a1 = np.arange(0,24).reshape((4,6))
a2 = a1 < 10
print(a1[a2]) #這樣就會(huì)在a1中把a(bǔ)2中為True的元素對(duì)應(yīng)的位置的值提取出來(lái)

其中布爾運(yùn)算可以有!=、==、>、<、>=、<=以及&(與)和|(或)

a1 = np.arange(0,24).reshape((4,6))
a2 = a1[(a1 < 5) | (a1 > 10)]
print(a2)

值的替換:

利用索引,也可以做一些值的替換。把滿足條件的位置的值替換成其他的值。

a1 = np.arange(0,24).reshape((4,6))
a1[3] = 0 #將第三行的所有值都替換成0
print(a1)

也可以使用條件索引來(lái)實(shí)現(xiàn):

a1 = np.arange(0,24).reshape((4,6))
a1[a1 < 5] = 0 #將小于5的所有值全部都替換成0
print(a1)

還可以使用函數(shù)來(lái)實(shí)現(xiàn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-484691.html

# where函數(shù):
a1 = np.arange(0,24).reshape((4,6))
a2 = np.where(a1 < 10,1,0) #把a(bǔ)1中所有小于10的數(shù)全部變成1,其余的變成0
print(a2)

到了這里,關(guān)于NumPy數(shù)組基本用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python庫(kù),科學(xué)計(jì)算與數(shù)據(jù)可視化基礎(chǔ),知識(shí)筆記(numpy+matplotlib)

    python庫(kù),科學(xué)計(jì)算與數(shù)據(jù)可視化基礎(chǔ),知識(shí)筆記(numpy+matplotlib)

    這篇主要講一下數(shù)據(jù)處理中科學(xué)計(jì)算部分的知識(shí)。 之前有一篇pandas處理數(shù)據(jù)的。 講一下這幾個(gè)庫(kù)的區(qū)別。 Pandas主要用來(lái)處理類表格數(shù)據(jù)(excel,csv),提供了計(jì)算接口,可用Numpy或其它方式進(jìn)行計(jì)算。 NumPy 主要用來(lái)處理數(shù)值數(shù)據(jù)(尤其是矩陣,向量為核心的),本質(zhì)上是純

    2024年02月02日
    瀏覽(34)
  • NumPy和Pandas庫(kù)的基本用法,用于數(shù)據(jù)處理和分析

    當(dāng)涉及到數(shù)據(jù)處理和分析時(shí),NumPy和Pandas是兩個(gè)非常常用的Python庫(kù)。下面是它們的基本用法: NumPy(Numerical Python): 導(dǎo)入NumPy庫(kù):在代碼中使用import numpy as np導(dǎo)入NumPy庫(kù)。 創(chuàng)建NumPy數(shù)組:使用np.array()函數(shù)可以創(chuàng)建一個(gè)NumPy數(shù)組。例如,arr = np.array([1, 2, 3, 4, 5])創(chuàng)建一個(gè)包含整數(shù)

    2024年02月11日
    瀏覽(39)
  • python實(shí)戰(zhàn)應(yīng)用講解-【numpy科學(xué)計(jì)算】line_profiler模塊(附python示例代碼)

    目錄 ? Numpy 安裝line_profiler 準(zhǔn)備工作 具體步驟 Numpy 用line_profiler分析代碼 具體步驟 攻略小結(jié)

    2023年04月08日
    瀏覽(110)
  • 【Python Numpy】廣播、數(shù)組的迭代

    【Python Numpy】廣播、數(shù)組的迭代

    在Python的科學(xué)計(jì)算領(lǐng)域,NumPy是一個(gè)強(qiáng)大的工具,它提供了用于操作多維數(shù)組的功能。廣播(Broadcasting)是NumPy中的一個(gè)重要概念,它使得不同形狀的數(shù)組之間的計(jì)算變得非常靈活和便捷。本文將介紹廣播是什么,以及如何在NumPy中使用廣播來(lái)進(jìn)行數(shù)組計(jì)算。 在Python的科學(xué)計(jì)算

    2024年02月06日
    瀏覽(24)
  • 【深度學(xué)習(xí)】 Python 和 NumPy 系列教程(十二):NumPy詳解:4、數(shù)組廣播;5、排序操作

    【深度學(xué)習(xí)】 Python 和 NumPy 系列教程(十二):NumPy詳解:4、數(shù)組廣播;5、排序操作

    目錄 一、前言 二、實(shí)驗(yàn)環(huán)境 三、NumPy 0、多維數(shù)組對(duì)象(ndarray) 多維數(shù)組的屬性 1、創(chuàng)建數(shù)組 2、數(shù)組操作 3、數(shù)組數(shù)學(xué) 4、數(shù)組廣播 5、排序操作 1. np.sort()?函數(shù) 2. np.argsort()?函數(shù) 3. ndarray.sort()?方法 4. 按列或行排序 5. np.lexsort()?函數(shù) 6. np.partition()?函數(shù) 7. np.argpartition()?函

    2024年02月08日
    瀏覽(31)
  • Python Numpy入門基礎(chǔ)(二)數(shù)組操作

    Python Numpy入門基礎(chǔ)(二)數(shù)組操作

    NumPy是Python中一個(gè)重要的數(shù)學(xué)運(yùn)算庫(kù),它提供了了一組多維數(shù)組對(duì)象和一組用于操作這些數(shù)組的函數(shù)。以下是一些NumPy的主要特點(diǎn): 多維數(shù)組對(duì)象:NumPy的核心是ndarray對(duì)象,它是一個(gè)多維數(shù)組對(duì)象,可以容納任意數(shù)據(jù)類型。 矢量化操作:使用NumPy的函數(shù),可以對(duì)整個(gè)數(shù)組進(jìn)行

    2024年02月15日
    瀏覽(27)
  • Python numpy - 數(shù)組與矩陣的運(yùn)算

    Python numpy - 數(shù)組與矩陣的運(yùn)算

    目錄 ?數(shù)組array 一 數(shù)組的函數(shù) unique函數(shù) ?sum函數(shù) ?max函數(shù) 二 數(shù)組的加減 三 數(shù)組的乘除 ?矩陣matrix 一 矩陣的生成 二 矩陣的加減 三? 矩陣的乘法 創(chuàng)建數(shù)組a和b用來(lái)運(yùn)算(至少兩個(gè)) 數(shù)組常用函數(shù) 函數(shù) 作用 unique() 求數(shù)組里的唯一值,輸出從小到大排列 sum() 對(duì)數(shù)組整

    2024年02月11日
    瀏覽(25)
  • Python numpy - 數(shù)組的創(chuàng)建與訪問(wèn)

    Python numpy - 數(shù)組的創(chuàng)建與訪問(wèn)

    目錄 一 數(shù)組array的創(chuàng)建途徑 1? 列表list? 2?函數(shù)array? 3 函數(shù)arange 4?函數(shù)zeros 5?函數(shù)eyes 6 隨機(jī)函數(shù)randn/?randint 二 數(shù)組array的訪問(wèn)? 1 訪問(wèn)形狀/元素個(gè)數(shù)/數(shù)據(jù)類型 ?2 訪問(wèn)一維數(shù)組的位置/范圍 3 訪問(wèn)二維數(shù)組的位置/范圍 4 用:訪問(wèn)二維數(shù)組的切片 生成數(shù)組的常用途徑 list列表

    2024年02月07日
    瀏覽(26)
  • Python Numpy入門基礎(chǔ)(一)創(chuàng)建數(shù)組

    Python Numpy入門基礎(chǔ)(一)創(chuàng)建數(shù)組

    1- np.array() 參數(shù)眾多,初學(xué)時(shí)只要關(guān)注基本用法。 元組、列表轉(zhuǎn)換 內(nèi)置函數(shù) range() 數(shù)組副本copy,開辟一塊新內(nèi)存復(fù)制原數(shù)組 主要參數(shù): dtype=? ? ?數(shù)組元素的數(shù)據(jù)類型,可選 copy=? ? ? 對(duì)象是否需要復(fù)制,可選 order=? ? ?創(chuàng)建數(shù)組的樣式,C為行方向,F(xiàn)為列方向,A為任意方

    2024年02月14日
    瀏覽(25)
  • (Python)對(duì)numpy中的argmax用法的理解

    (Python)對(duì)numpy中的argmax用法的理解

    argmax()返回的就是最大數(shù)的索引 argmax()有一個(gè)參數(shù)axis,可以指定函數(shù)返回不同維的最大值。 結(jié)果是 4 。而在python中一維向量只有一個(gè)方向,所以一維情況下axis只能等于0,函數(shù)只會(huì)返回一個(gè)值。 如果對(duì)它進(jìn)行轉(zhuǎn)置,它就會(huì)變成一個(gè)二維矩陣: axis的值大于0 比如說(shuō) 會(huì)報(bào)錯(cuò) nu

    2023年04月24日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包