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],:]