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

Numpy的各種下標(biāo)操作的示例代碼

 更新時(shí)間:2022年02月24日 08:31:09   作者:DechinPhy  
本文主要介紹了Numpy的各種下標(biāo)操作的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

技術(shù)背景

本文所使用的Numpy版本為:Version: 1.20.3?;赑ython和C++開發(fā)的Numpy一般被認(rèn)為是Python中最好的Matlab替代品,其中最常見的就是各種Numpy矩陣類型的運(yùn)算。對于矩陣的運(yùn)算而言,取對軸和元素是至關(guān)重要的,這里我們來看看一些常見的Numpy下標(biāo)取法和標(biāo)記。

二維矩陣的取法

這里我們定義一個(gè)4*4的矩陣用于取下標(biāo),為了方便理解,這個(gè)矩陣中所有的元素都是不一樣的:

In [1]: import numpy as np

In [2]: x = np.arange(16).reshape((4,4))

In [3]: x
Out[3]:?
array([[ 0, ?1, ?2, ?3],
? ? ? ?[ 4, ?5, ?6, ?7],
? ? ? ?[ 8, ?9, 10, 11],
? ? ? ?[12, 13, 14, 15]])

取單行和單個(gè)元素

比如我們想取第一行的所有元素,那么就是x[0],如果想取第一行的第一列的元素,那么就是x[0][0],而在numpy中為了簡化,可以講x[0][0]寫成x[0,0]的形式:

In [4]: id = 0

In [5]: x[id]
Out[5]: array([0, 1, 2, 3])

In [6]: x[id][id]
Out[6]: 0

In [7]: x[id,id]
Out[7]: 0

下標(biāo)的list和tuple格式區(qū)分

在上一個(gè)章節(jié)中我們提到的取單個(gè)元素x[0,0]的方法,其實(shí)本質(zhì)上等同于x[(0,0)],也就是一個(gè)tuple的格式,但是如果把這里的tuple格式換成list,所表示的含義和得到的結(jié)果是完全不一樣的:

In [8]: id = [1,1]

In [9]: x[id]
Out[9]:?
array([[4, 5, 6, 7],
? ? ? ?[4, 5, 6, 7]])

In [10]: x[id,id]
Out[10]: array([5, 5])

In [11]: id = (1,1)

In [12]: x[id]
Out[12]: 5

這里list格式的id,代表的意思是分別取第二行和第二行的內(nèi)容,再放到一個(gè)完整的矩陣中。如果id設(shè)置為[1,2]的話,就是分別取第二行和第三行,而不是取第二行的第二個(gè)元素。如果需要取第二行的第二列的元素,那么還是需要用tuple的格式來取下標(biāo)。有一個(gè)比較有意思的點(diǎn)是,如果把剛才的下標(biāo)重復(fù)輸入兩次,也就是x[[1,2],[1,2]]的話,所表示的含義是分別取x[1][1]和x[2][2],再放到同一個(gè)矩陣中,也是一種比較常用的分離式取下標(biāo)的方法。

冒號的使用

在Numpy的下標(biāo)中,冒號和后置逗號同時(shí)出現(xiàn),表示軸向全取,比如x[0,:]表示取x的第一行的所有數(shù)據(jù),x[:,0]表示取第一列的所有數(shù)據(jù):

In [14]: id = 1

In [15]: x[id,:]
Out[15]: array([4, 5, 6, 7])

In [16]: x[:,id]
Out[16]: array([ 1, ?5, ?9, 13])

現(xiàn)存的list與numpy.array不相兼容的取法

雖然上文我們提到,如果下標(biāo)被定義成一個(gè)list格式的話,就表示分別取。但是目前Numpy的實(shí)現(xiàn)中還有這樣的一個(gè)遺留問題,就是使用多維的list格式取下標(biāo),會自動將最外層轉(zhuǎn)化成tuple的格式,采用tuple的取法。雖然計(jì)算時(shí)會給出告警,但是目前來說也需要引起一定的注意。

In [17]: id = [[1],[1]]

In [18]: x[id]
<ipython-input-18-23f8764f4b7e>:1: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
? x[id]
Out[18]: array([5])

In [19]: id = np.array([[1],[1]])

In [20]: x[id]
Out[20]:?
array([[[4, 5, 6, 7]],

? ? ? ?[[4, 5, 6, 7]]])

兩個(gè)冒號的組合用法

在Numpy中冒號不與后置逗號同時(shí)出現(xiàn)時(shí),表示的含義是從冒號前的元素取值到冒號后的元素,比如x[0:3]所表示的元素是[x[0],x[1],x[2]]。如果是兩個(gè)冒號連用中間沒有逗號的話,比如x[0:3:2],表示的是每隔2個(gè)元素取一個(gè),最后得到的應(yīng)該是[x[0],x[2]]。還有一種非常常見的操作是取[::-1]這樣的下標(biāo),所表示的含義就是對當(dāng)前軸進(jìn)行倒序。

In [31]: x[::-1]
Out[31]:?
array([[12, 13, 14, 15],
? ? ? ?[ 8, ?9, 10, 11],
? ? ? ?[ 4, ?5, ?6, ?7],
? ? ? ?[ 0, ?1, ?2, ?3]])

In [32]: x[::-1,::-1]
Out[32]:?
array([[15, 14, 13, 12],
? ? ? ?[11, 10, ?9, ?8],
? ? ? ?[ 7, ?6, ?5, ?4],
? ? ? ?[ 3, ?2, ?1, ?0]])

用None作擴(kuò)維

雖然在Numpy中有broadcast和expand_dim之類的函數(shù)可以對矩陣進(jìn)行擴(kuò)維或者是廣播,但是更方便的操作是對需要擴(kuò)展的維度取一個(gè)None的下標(biāo),比如要把一個(gè)(4,4)大小的矩陣擴(kuò)展成(1,4,4),那么就對下標(biāo)取[None,:]或者[None,:,:]即可。而如果需要把(4,4)變成(4,1,4),那就需要把None換個(gè)位置為[:,None,:]就可以實(shí)現(xiàn):

In [33]: x[None,:]
Out[33]:?
array([[[ 0, ?1, ?2, ?3],
? ? ? ? [ 4, ?5, ?6, ?7],
? ? ? ? [ 8, ?9, 10, 11],
? ? ? ? [12, 13, 14, 15]]])

In [34]: x[:,None,:]
Out[34]:?
array([[[ 0, ?1, ?2, ?3]],

? ? ? ?[[ 4, ?5, ?6, ?7]],

? ? ? ?[[ 8, ?9, 10, 11]],

? ? ? ?[[12, 13, 14, 15]]])

In [35]: x[:,:,None]
Out[35]:?
array([[[ 0],
? ? ? ? [ 1],
? ? ? ? [ 2],
? ? ? ? [ 3]],

? ? ? ?[[ 4],
? ? ? ? [ 5],
? ? ? ? [ 6],
? ? ? ? [ 7]],

? ? ? ?[[ 8],
? ? ? ? [ 9],
? ? ? ? [10],
? ? ? ? [11]],

? ? ? ?[[12],
? ? ? ? [13],
? ? ? ? [14],
? ? ? ? [15]]])

高維矩陣的取法

在高維矩陣中,因?yàn)闆]有了行和列這樣的概念,因此需要從軸上去理解相關(guān)操作,我們先定義一個(gè)簡單的三維張量:

In [49]: y = np.arange(32).reshape((2,4,4))

In [50]: y
Out[50]:?
array([[[ 0, ?1, ?2, ?3],
? ? ? ? [ 4, ?5, ?6, ?7],
? ? ? ? [ 8, ?9, 10, 11],
? ? ? ? [12, 13, 14, 15]],

? ? ? ?[[16, 17, 18, 19],
? ? ? ? [20, 21, 22, 23],
? ? ? ? [24, 25, 26, 27],
? ? ? ? [28, 29, 30, 31]]])

常規(guī)的操作其實(shí)都跟前面章節(jié)中介紹二維張量一致,這里我們考慮一種比較特殊的場景。就是如果同樣用二維矩陣的取法去取,只是第一條軸每個(gè)元素取一個(gè)id,比如取第0條軸的[0,1]元素和第1條軸的[2,3]元素,那么其實(shí)最簡單的方案就是在第一個(gè)下標(biāo)的位置加上一個(gè)位置元素,這個(gè)位置元素用下標(biāo)id的第一個(gè)軸的長度去定義即可:

In [58]: id = np.array([[0,1],[2,3]])

In [59]: y[np.arange(id.shape[0]),id[:,0],id[:,1]]
Out[59]: array([ 1, 27])

總結(jié)概要

這篇文章的主要內(nèi)容是梳理在Numpy中經(jīng)常用到的各種取下標(biāo)的操作,包括但不限于取指定軸的所有元素、取指定位置的單個(gè)元素、取指定位置的多個(gè)元素、擴(kuò)維以及取未顯式給定位置的多個(gè)元素等等。比較重要的是在Numpy中tuple的取法和list的取法是代表不一樣的含義,并且由于歷史原因,Numpy中存在一些list取法和numpy.array的取法表示不一致的地方,在本文中進(jìn)行了總結(jié)。

到此這篇關(guān)于Numpy的各種下標(biāo)操作的示例代碼的文章就介紹到這了,更多相關(guān)Numpy 下標(biāo) 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python面向?qū)ο笾惖睦^承詳解

    python面向?qū)ο笾惖睦^承詳解

    這篇文章主要介紹了python面向?qū)ο笾惖睦^承詳解,通過概述定義講解了類的繼承的功能和創(chuàng)建方式,寫出了代碼實(shí)例供參考,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Python list操作用法總結(jié)

    Python list操作用法總結(jié)

    這篇文章主要介紹了Python list操作用法,以實(shí)例形式較為詳細(xì)的總結(jié)分析了Python中l(wèi)ist的各種常見函數(shù)的功能與使用方法,需要的朋友可以參考下
    2015-11-11
  • PyQt5中多線程模塊QThread使用方法的實(shí)現(xiàn)

    PyQt5中多線程模塊QThread使用方法的實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5中多線程模塊QThread使用方法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • python pip安裝的包放在哪個(gè)目錄(site-packages目錄的位置)

    python pip安裝的包放在哪個(gè)目錄(site-packages目錄的位置)

    這篇文章主要介紹了python pip安裝的包放在哪個(gè)目錄(site-packages目錄的位置),通常安裝在python安裝目錄下的lib/site-packages目錄下,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • PyTorch中的squeeze()和unsqueeze()解析與應(yīng)用案例

    PyTorch中的squeeze()和unsqueeze()解析與應(yīng)用案例

    這篇文章主要介紹了PyTorch中的squeeze()和unsqueeze()解析與應(yīng)用案例,文章內(nèi)容介紹詳細(xì),需要的小伙伴可以參考一下,希望對你有所幫助
    2022-03-03
  • 結(jié)合Python網(wǎng)絡(luò)爬蟲做一個(gè)今日新聞小程序

    結(jié)合Python網(wǎng)絡(luò)爬蟲做一個(gè)今日新聞小程序

    本篇文章介紹了我在開發(fā)過程中遇到的一個(gè)問題,以及解決該問題的過程及思路,通讀本篇對大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-09-09
  • jupyter notebook實(shí)現(xiàn)顯示行號

    jupyter notebook實(shí)現(xiàn)顯示行號

    這篇文章主要介紹了jupyter notebook實(shí)現(xiàn)顯示行號,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python中每次處理一個(gè)字符的5種方法

    Python中每次處理一個(gè)字符的5種方法

    這篇文章主要介紹了Python中每次處理一個(gè)字符的5種方法,即把字符串分割成字符數(shù)組或把字符串切割成單獨(dú)字符的方法,需要的朋友可以參考下
    2015-05-05
  • Python 實(shí)現(xiàn)PS濾鏡的旋渦特效

    Python 實(shí)現(xiàn)PS濾鏡的旋渦特效

    這篇文章主要介紹了Python 實(shí)現(xiàn) PS 濾鏡的旋渦特效,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • pytorch實(shí)現(xiàn)Tensor變量之間的轉(zhuǎn)換

    pytorch實(shí)現(xiàn)Tensor變量之間的轉(zhuǎn)換

    今天小編就為大家分享一篇pytorch實(shí)現(xiàn)Tensor變量之間的轉(zhuǎn)換,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論

牡丹江市| 塘沽区| 循化| 南靖县| 青岛市| 沾益县| 剑河县| 灵山县| 西平县| 西华县| 饶阳县| 余干县| 绥宁县| 新田县| 禄丰县| 焉耆| 屯留县| 安远县| 凤台县| 望奎县| 鄂尔多斯市| 庆云县| 太保市| 华池县| 白沙| 民丰县| 柏乡县| 城口县| 东阳市| 武山县| 曲水县| 琼结县| 乌海市| 甘洛县| 宁城县| 鲁山县| 鹰潭市| 潮安县| 开封市| 金堂县| 迭部县|