3 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超10個贊
這可能是最容易做到的x[None, 10, :]或等效的方法(但更具可讀性)x[np.newaxis, 10, :]。
至于為什么不是默認(rèn)值,我個人發(fā)現(xiàn),不斷擁有單例維數(shù)的數(shù)組會非常煩人。我猜想那些麻木的開發(fā)者也有同樣的感覺。
而且,numpy可以很好地處理廣播數(shù)組,因此通常沒有理由保留切片所來自的數(shù)組的尺寸。如果您這樣做了,那么類似:
a = np.zeros((100,100,10))
b = np.zeros(100,10)
a[0,:,:] = b
要么行不通,要么實施起來更加困難。
(或者至少這是我對切片時刪除維度信息背后的numpy開發(fā)人員的猜測)

TA貢獻(xiàn)1833條經(jīng)驗 獲得超4個贊
另一個解決方案是
X[[10],:]
要么
I = array([10])
X[I,:]
當(dāng)由索引列表(或數(shù)組)執(zhí)行索引時,將保留數(shù)組的維數(shù)。這很好,因為它使您可以選擇保留尺寸和壓縮尺寸。

TA貢獻(xiàn)1821條經(jīng)驗 獲得超5個贊
這是我更喜歡的替代方法。而不是使用單個數(shù)字編制索引,而是使用范圍進(jìn)行索引。即使用X[10:11,:]。(請注意,其中10:11不包括11)。
import numpy as np
X = np.zeros((100,10))
X.shape # >> (100, 10)
xslice = X[10:11,:]
xslice.shape # >> (1,10)
這也使得使用更多尺寸也很容易理解,而無需None費力地弄清楚要使用哪個索引的軸。同樣,無需為陣列大小做額外的記賬工作,只需i:i+1為i您將在常規(guī)索引中使用的任何記賬工作做好。
b = np.ones((2, 3, 4))
b.shape # >> (2, 3, 4)
b[1:2,:,:].shape # >> (1, 3, 4)
b[:, 2:3, :].shape . # >> (2, 1, 4)
添加回答
舉報