最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Numpy中ndarray的常見(jiàn)操作

 更新時(shí)間:2022年07月26日 15:22:27   作者:亦嵐君  
這篇文章主要介紹了Python Numpy中ndarray的常見(jiàn)操作,NumPy是Python的一種開(kāi)源的數(shù)值計(jì)算擴(kuò)展,更多詳細(xì)內(nèi)容需要的朋友可以參考一下

前言

NumPy(Numerical Python)是Python的一種開(kāi)源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來(lái)存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來(lái)表示矩陣(matrix)),支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。
Numpy中主要使用ndarray來(lái)處理N維數(shù)組,Numpy中的大部分屬性和方法都是為ndarray服務(wù)的,所以掌握Numpy中ndarray的常見(jiàn)操作非常有必要!

0 Numpy基礎(chǔ)知識(shí)

NumPy的主要對(duì)象是同構(gòu)多維數(shù)組。它是一個(gè)元素表(通常是數(shù)字),所有類(lèi)型都相同,由非負(fù)整數(shù)元組索引。在NumPy維度中稱(chēng)為軸 。
下面所示的例子中,數(shù)組有2個(gè)軸。第一軸的長(zhǎng)度為2,第二軸的長(zhǎng)度為3。

[[ 1., 0., 0.],
 [ 0., 1., 2.]]

1 ndarray的屬性

1.1 輸出ndarray的常見(jiàn)屬性

  • ndarray.ndim : 數(shù)組的軸(維度)的個(gè)數(shù)。在Python世界中,維度的數(shù)量被稱(chēng)為rank。
  • ndarray.shape :數(shù)組的維度。這是一個(gè)整數(shù)的元組,表示每個(gè)維度中數(shù)組的大小。對(duì)于有 n 行和 m 列的矩陣,shape 將是 (n,m)。因此,shape 元組的長(zhǎng)度就是rank或維度的個(gè)數(shù) ndim。
  • ndarray.size :數(shù)組元素的總數(shù)。這等于 shape 的元素的乘積。
  • ndarray.dtype :一個(gè)描述數(shù)組中元素類(lèi)型的對(duì)象??梢允褂脴?biāo)準(zhǔn)的Python類(lèi)型創(chuàng)建或指定dtype。另外NumPy提供它自己的類(lèi)型。例如numpy.int32、numpy.int16和numpy.float64。
  • ndarray.itemsize :數(shù)組中每個(gè)元素的字節(jié)大小。例如,元素為 float64 類(lèi)型的數(shù)組的 itemsize 為8(=64/8),而 complex32 類(lèi)型的數(shù)組的 itemsize 為4(=32/8)。它等于 ndarray.dtype.itemsize 。
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>

2 ndarray的數(shù)據(jù)類(lèi)型

在同一個(gè)ndarray中,存儲(chǔ)的是同一類(lèi)型的數(shù)據(jù),ndarray常見(jiàn)的數(shù)據(jù)類(lèi)型包括:

3 修改ndarray的形狀和數(shù)據(jù)類(lèi)型

3.1 查看和修改ndarray的形狀

## ndarray reshape操作
array_a = np.array([[1, 2, 3], [4, 5, 6]])
print(array_a, array_a.shape)
array_a_1 = array_a.reshape((3, 2))
print(array_a_1, array_a_1.shape)
# note: reshape不能改變ndarray中元素的個(gè)數(shù),例如reshape之前為(2,3),reshape之后為(3,2)/(1,6)...
## ndarray轉(zhuǎn)置
array_a_2 = array_a.T
print(array_a_2, array_a_2.shape)
## ndarray ravel操作:將ndarray展平
a.ravel()  # returns the array, flattened
array([ 1,  2,  3,  4,  5,  6 ])

輸出:
[[1 2 3]
 [4 5 6]] (2, 3)
[[1 2]
 [3 4]
 [5 6]] (3, 2)
[[1 4]
 [2 5]
 [3 6]] (3, 2)

3.2 查看和修改ndarray的數(shù)據(jù)類(lèi)型

astype(dtype[, order, casting, subok, copy]):修改ndarray中的數(shù)據(jù)類(lèi)型。傳入需要修改的數(shù)據(jù)類(lèi)型,其他關(guān)鍵字參數(shù)可以不關(guān)注。

array_a = np.array([[1, 2, 3], [4, 5, 6]])
print(array_a, array_a.dtype)
array_a_1 = array_a.astype(np.int64)
print(array_a_1, array_a_1.dtype)
輸出:
[[1 2 3]
 [4 5 6]] int32
[[1 2 3]
 [4 5 6]] int64

4 ndarray數(shù)組創(chuàng)建

NumPy主要通過(guò)np.array()函數(shù)來(lái)創(chuàng)建ndarray數(shù)組。

>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')

也可以在創(chuàng)建時(shí)顯式指定數(shù)組的類(lèi)型:

>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])

也可以通過(guò)使用np.random.random函數(shù)來(lái)創(chuàng)建隨機(jī)的ndarray數(shù)組。

>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021,  0.34556073,  0.39676747],
       [ 0.53881673,  0.41919451,  0.6852195 ]])

通常,數(shù)組的元素最初是未知的,但它的大小是已知的。因此,NumPy提供了幾個(gè)函數(shù)來(lái)創(chuàng)建具有初始占位符內(nèi)容的數(shù)組。這就減少了數(shù)組增長(zhǎng)的必要,因?yàn)閿?shù)組增長(zhǎng)的操作花費(fèi)很大。
函數(shù)zeros創(chuàng)建一個(gè)由0組成的數(shù)組,函數(shù) ones創(chuàng)建一個(gè)完整的數(shù)組,函數(shù)empty 創(chuàng)建一個(gè)數(shù)組,其初始內(nèi)容是隨機(jī)的,取決于內(nèi)存的狀態(tài)。默認(rèn)情況下,創(chuàng)建的數(shù)組的dtype是 float64 類(lèi)型的。

>>> np.zeros( (3,4) )
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> np.ones( (2,3,4), dtype=np.int16 )                # dtype can also be specified
array([[[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]],
       [[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) )                                 # uninitialized, output may vary
array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],
       [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])

為了創(chuàng)建數(shù)字組成的數(shù)組,NumPy提供了一個(gè)類(lèi)似于range的函數(shù),該函數(shù)返回?cái)?shù)組而不是列表。

>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 )                 # it accepts float arguments
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

5 ndarray數(shù)組的常見(jiàn)運(yùn)算

與許多矩陣語(yǔ)言不同,乘積運(yùn)算符*在NumPy數(shù)組中按元素進(jìn)行運(yùn)算。矩陣乘積可以使用@運(yùn)算符(在python> = 3.5中)或dot函數(shù)或方法執(zhí)行:

>>> A = np.array( [[1,1],
...             [0,1]] )
>>> B = np.array( [[2,0],
...             [3,4]] )
>>> A * B                       # elementwise product
array([[2, 0],
       [0, 4]])
>>> A @ B                       # matrix product
array([[5, 4],
       [3, 4]])
>>> A.dot(B)                    # another matrix product
array([[5, 4],
       [3, 4]])

某些操作(例如+=*=)會(huì)更直接更改被操作的矩陣數(shù)組而不會(huì)創(chuàng)建新矩陣數(shù)組。

>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022  ,  3.72032449,  3.00011437],
       [ 3.30233257,  3.14675589,  3.09233859]])
>>> a += b                  # b is not automatically converted to integer type
Traceback (most recent call last):
  ...
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int64') with casting rule 'same_kind'

當(dāng)使用不同類(lèi)型的數(shù)組進(jìn)行操作時(shí),結(jié)果數(shù)組的類(lèi)型對(duì)應(yīng)于更一般或更精確的數(shù)組(稱(chēng)為向上轉(zhuǎn)換的行為)。

>>> a = np.ones(3, dtype=np.int32)
>>> b = np.linspace(0,pi,3)
>>> b.dtype.name
'float64'
>>> c = a+b
>>> c
array([ 1.        ,  2.57079633,  4.14159265])
>>> c.dtype.name
'float64'
>>> d = np.exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
       -0.54030231-0.84147098j])
>>> d.dtype.name
'complex128'

許多一元操作,例如計(jì)算數(shù)組中所有元素的總和,都是作為ndarray類(lèi)的方法實(shí)現(xiàn)的。

>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021,  0.34556073,  0.39676747],
       [ 0.53881673,  0.41919451,  0.6852195 ]])
>>> a.sum()
2.5718191614547998
>>> a.min()
0.1862602113776709
>>> a.max()
0.6852195003967595

默認(rèn)情況下,這些操作適用于數(shù)組,就像它是一個(gè)數(shù)字列表一樣,無(wú)論其形狀如何。但是,通過(guò)指定axis 參數(shù),您可以沿?cái)?shù)組的指定軸應(yīng)用操作:

>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>
>>> b.sum(axis=0)                            # 計(jì)算每一列的和
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)                            # 計(jì)算每一行的和
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)                         # cumulative sum along each row
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])
解釋?zhuān)阂缘谝恍袨槔?=0,1=1+0,3=2+1+0,6=3+2+1+0

6 ndarray數(shù)組的索引、切片和迭代

一維的數(shù)組可以進(jìn)行索引、切片和迭代操作的,就像列表和其他Python序列類(lèi)型一樣。

>>> a = np.arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000    # 等價(jià)于 a[0:6:2] = -1000; 從0到6的位置, 每隔一個(gè)設(shè)置為-1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,  fan 216,   343,   512,   729])
>>> a[ : :-1]                                 # 將a反轉(zhuǎn)
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])

多維的數(shù)組每個(gè)軸可以有一個(gè)索引。這些索引以逗號(hào)??分隔的元組給出:

>>> b
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5, 1]                       # each row in the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1]                        # equivalent to the previous example
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ]                      # each column in the second and third row of b
array([[10, 11, 12, 13],
       [20, 21, 22, 23]])
>>> b[-1]                                  # the last row. Equivalent to b[-1,:]
array([40, 41, 42, 43])

7 ndarray數(shù)組的堆疊、拆分

幾個(gè)數(shù)組可以沿不同的軸堆疊在一起,例如:np.vstack()函數(shù)和np.hstack()函數(shù)

>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[ 8.,  8.],
       [ 0.,  0.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[ 1.,  8.],
       [ 0.,  4.]])
>>> np.vstack((a,b))
array([[ 8.,  8.],
       [ 0.,  0.],
       [ 1.,  8.],
       [ 0.,  4.]])
>>> np.hstack((a,b))
array([[ 8.,  8.,  1.,  8.],
       [ 0.,  0.,  0.,  4.]])

column_stack()函數(shù)將1D數(shù)組作為列堆疊到2D數(shù)組中。

>>> from numpy import newaxis
>>> a = np.array([4.,2.])
>>> b = np.array([3.,8.])
>>> np.column_stack((a,b))     # returns a 2D array
array([[ 4., 3.],
       [ 2., 8.]])
>>> np.hstack((a,b))           # the result is different
array([ 4., 2., 3., 8.])
>>> a[:,newaxis]               # this allows to have a 2D columns vector
array([[ 4.],
       [ 2.]])
>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[ 4.,  3.],
       [ 2.,  8.]])
>>> np.hstack((a[:,newaxis],b[:,newaxis]))   # the result is the same
array([[ 4.,  3.],
       [ 2.,  8.]])

使用hsplit(),可以沿?cái)?shù)組的水平軸拆分?jǐn)?shù)組,方法是指定要返回的形狀相等的數(shù)組的數(shù)量,或者指定應(yīng)該在其之后進(jìn)行分割的列:
同理,使用vsplit(),可以沿?cái)?shù)組的垂直軸拆分?jǐn)?shù)組,方法同上。

################### np.hsplit ###################
>>> a = np.floor(10*np.random.random((2,12)))
>>> a
array([[ 9.,  5.,  6.,  3.,  6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.],
       [ 1.,  4.,  9.,  2.,  2.,  1.,  0.,  6.,  2.,  2.,  4.,  0.]])
>>> np.hsplit(a,3)   # Split a into 3
[array([[ 9.,  5.,  6.,  3.],
       [ 1.,  4.,  9.,  2.]]), array([[ 6.,  8.,  0.,  7.],
       [ 2.,  1.,  0.,  6.]]), array([[ 9.,  7.,  2.,  7.],
       [ 2.,  2.,  4.,  0.]])]
>>> np.hsplit(a,(3,4))   # Split a after the third and the fourth column
[array([[ 9.,  5.,  6.],
       [ 1.,  4.,  9.]]), array([[ 3.],
       [ 2.]]), array([[ 6.,  8.,  0.,  7.,  9.,  7.,  2.,  7.],
       [ 2.,  1.,  0.,  6.,  2.,  2.,  4.,  0.]])]
>>> x = np.arange(8.0).reshape(2, 2, 2)
>>> x
array([[[0.,  1.],
        [2.,  3.]],
       [[4.,  5.],
        [6.,  7.]]])
################### np.vsplit ###################
>>> np.vsplit(x, 2)
[array([[[0., 1.],
        [2., 3.]]]), array([[[4., 5.],
        [6., 7.]]])]

到此這篇關(guān)于Python Numpy中ndarray的常見(jiàn)操作的文章就介紹到這了,更多相關(guān)Python ndarray操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python格式化文本段落之textwrap庫(kù)

    Python格式化文本段落之textwrap庫(kù)

    這篇文章主要介紹了Python格式化文本段落之textwrap庫(kù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很大的幫助喲,需要的朋友可以參考下
    2021-05-05
  • Python?pip更新的兩種方式詳解

    Python?pip更新的兩種方式詳解

    Pip是用于管理Python軟件包的常用命令,Pip命令還用于更新/升級(jí)已經(jīng)安裝的Python軟件包,下面這篇文章主要給大家介紹了關(guān)于Python?pip更新的兩種方式,需要的朋友可以參考下
    2023-02-02
  • Python實(shí)現(xiàn)Restful API的例子

    Python實(shí)現(xiàn)Restful API的例子

    今天小編就為大家分享一篇Python實(shí)現(xiàn)Restful API的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python中zip()函數(shù)的解釋和可視化(實(shí)例詳解)

    Python中zip()函數(shù)的解釋和可視化(實(shí)例詳解)

    zip() 函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表。這篇文章主要介紹了Python中zip()函數(shù)的解釋和可視化,需要的朋友可以參考下
    2020-02-02
  • python腳本內(nèi)運(yùn)行l(wèi)inux命令的方法

    python腳本內(nèi)運(yùn)行l(wèi)inux命令的方法

    這篇文章主要介紹了python腳本內(nèi)運(yùn)行l(wèi)inux命令的方法,實(shí)例分析了Python基于subprocess模塊操作Linux命令的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • python里對(duì)list中的整數(shù)求平均并排序

    python里對(duì)list中的整數(shù)求平均并排序

    本文主要記述了使用Python將list重點(diǎn)整數(shù)求平均值之后在進(jìn)行排列的過(guò)程,并把代碼分享給大家,希望大家能給鼓鼓掌~~~
    2014-09-09
  • python中pywebview框架使用方法記錄

    python中pywebview框架使用方法記錄

    Pywebview是一個(gè)用于構(gòu)建網(wǎng)頁(yè)的Python庫(kù),類(lèi)似于Flask框架,但主要使用Python編寫(xiě)而非HTML或JS,通過(guò)簡(jiǎn)單的命令即可安裝和使用,支持創(chuàng)建自制或調(diào)用外部網(wǎng)頁(yè)界面,需要的朋友可以參考下
    2024-09-09
  • Python?webargs?模塊的簡(jiǎn)單使用

    Python?webargs?模塊的簡(jiǎn)單使用

    webargs是一個(gè)用于解析和驗(yàn)證HTTP請(qǐng)求對(duì)象的Python庫(kù),今天通過(guò)本文給大家介紹Python?webargs?模塊的安裝使用,感興趣的朋友一起看看吧
    2022-01-01
  • Python 快速實(shí)現(xiàn)CLI 應(yīng)用程序的腳手架

    Python 快速實(shí)現(xiàn)CLI 應(yīng)用程序的腳手架

    本篇文章主要介紹了Python 快速實(shí)現(xiàn)CLI 應(yīng)用程序的腳手架,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 使用python實(shí)現(xiàn)壓縮PDF文件大小的方法

    使用python實(shí)現(xiàn)壓縮PDF文件大小的方法

    壓縮 PDF 文件能有效減小文件大小并提高文件傳輸?shù)男?同時(shí)還能節(jié)省計(jì)算機(jī)存儲(chǔ)空間,除了使用一些專(zhuān)業(yè)工具對(duì)PDF文件進(jìn)行壓縮,我們還可以通過(guò) Python 來(lái)執(zhí)行該操作,本文將分享一個(gè)簡(jiǎn)單有效的使用 Python 壓縮 PDF 文件的方法,需要的朋友可以參考下
    2024-06-06

最新評(píng)論

张家港市| 阿尔山市| 南京市| 伊川县| 无棣县| 太湖县| 府谷县| 江门市| 华坪县| 金昌市| 张家界市| 海伦市| 弥渡县| 东台市| 名山县| 渝中区| 张家界市| 卓尼县| 金乡县| 衡水市| 峡江县| 雷山县| 台安县| 神农架林区| 衡东县| 武胜县| 维西| 溧水县| 嘉善县| 大竹县| 惠水县| 绍兴市| 新巴尔虎右旗| 高雄县| 金湖县| 瑞昌市| 伊宁市| 裕民县| 武鸣县| 深圳市| 新绛县|