numpy切片里的省略號[...,0]的作用


原文:https://www.cnblogs.com/ppes/p/9462063.html 

官網的定義:

Ellipsis expand to the number of : objects needed to make a selection tuple of the same length as x.ndim. There may only be a single ellipsis present.

按照定義的理解,它是對 切片 [ : ] 里的 : 的拓展,但是它只能出現一個,就是說你可以,[ : , : , : ],但是[ ... , ...]就會報錯。

具體的拓展,看官方的說法也是一頭霧水,代碼還是更直觀一點:

1 x = np.random.RandomState(5).randint(200, size=[3, 4, 5])
2 print(x.ndim, x.shape, x.size)
3 print(x)

 按定義看,...  和 : 好像有點見不得人的關系,所以使用它們來進行比較:

首先是 

1 print("x: \n", x[:])
2 print('x[...]\n', x[...])

兩個結果都一樣是 就是上圖的 x

好像只是改個馬甲而已,那么

print('x[..., 1]\n', x[..., 1])
print('x[:, 1]\n', x[:, 1])

好吧,打擾了,現在看看是怎么回事。我就不解釋 :了,畢竟我們的主角是 ... 。好了,我們仔細觀察:

這個 1 好像就代表第2列(從0開始),如果是這樣的話,那么使用了 ... 之后,數字 1 不再是元素的index 了 , 而是 軸(axis)

的索引了,關於軸可以看看這我對軸的介紹:https://www.cnblogs.com/ppes/p/9461246.html 。如果你看過我的介紹,或者知道軸的作用那么,

我們可以這樣去判斷,一共有4 列(假設為 y0,y1,y2,y3),所以我們 x[... :5]就會報錯而[ ... : -5]就不會。結果正如猜想的一樣,確實報錯了,而-5也正好就是第1列(y0)的數據。

 

 現在我們知道 ... 的作用,就是對軸進行索引,那么,怎么確定哪一條軸呢?

 x[1 : ... ]

現在你們大概也懂了,數字在哪一維:x[3維][2維][1維]。

但是我們只有添加一個 ... ,1 維 怎么獲取呢,x[: , ... , 1] 、x[ 1, ...,1 ] 、x[ 1, 1, ... ]分別輸出的是什么?

自己動手吧,不然你是記不住的!!因為神童是不會看這篇文章的。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM