Numpy索引切片,不会丢失维度信息

我正在使用numpy,并且希望索引一行而不会丢失维度信息。

import numpy as np X = np.zeros((100,10)) X.shape # >> (100, 10) xslice = X[10,:] xslice.shape # >> (10,) 

在这个例子中,xslice现在是1维,但我希望它是(1,10)。 在R中,我将使用X [10,:,drop = F]。 在numpy中有类似的东西吗? 我在文档中找不到它,并没有看到类似的问题。

谢谢!

x[10,:,None]或等价的(但更易读的) x[10,:,np.newaxis]可能是最简单的。

至于为什么它不是默认值,个人而言,我发现不断地让单数维度的数组非常恼人。 我猜想这个numpy的开发者也是这样。

此外,numpy处理广播数组非常好,所以通常没有理由保留片段来自的数组维度。 如果你这样做,那么事情就是:

 a = np.zeros((100,100,10)) b = np.zeros(100,10) a[0,:,:] = b 

要么不行,要么执行起来就困难得多。

(或者至less这是我的猜测在numpy开发人员在切片时放弃维度信息的推理)

另一个解决方法是做

 X[[10],:] 

要么

 I = array([10]) X[I,:] 

当由索引列表(或数组)执行索引时,数组的维度被保留。 这很好,因为它让你保持维度和挤压之间的select。

我find了一些合理的解决scheme。

1)使用numpy.take(X,[10],0)

2)使用这个奇怪的索引X[10:11:, :]

理想情况下,这应该是默认的。 我从来不明白为什么尺寸会下降。 但这是一个讨论numpy …

你也可以简单地使用一个列表:

 X[[10],:]