3 回答
TA贡献1789条经验 获得超10个赞
这可能是最容易做到的x[None, 10, :]或等效的方法(但更具可读性)x[np.newaxis, 10, :]。
至于为什么不是默认值,我个人发现,不断拥有单例维数的数组会非常烦人。我猜想那些麻木的开发者也有同样的感觉。
而且,numpy可以很好地处理广播数组,因此通常没有理由保留切片所来自的数组的尺寸。如果您这样做了,那么类似:
a = np.zeros((100,100,10))
b = np.zeros(100,10)
a[0,:,:] = b
要么行不通,要么实施起来更加困难。
(或者至少这是我对切片时删除维度信息背后的numpy开发人员的猜测)
TA贡献1833条经验 获得超4个赞
另一个解决方案是
X[[10],:]
要么
I = array([10])
X[I,:]
当由索引列表(或数组)执行索引时,将保留数组的维数。这很好,因为它使您可以选择保留尺寸和压缩尺寸。
TA贡献1821条经验 获得超4个赞
这是我更喜欢的替代方法。而不是使用单个数字编制索引,而是使用范围进行索引。即使用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您将在常规索引中使用的任何记账工作做好。
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)
添加回答
举报