2013-03-06 89 views
13

来索引numpy的阵列的中间点,你可以这样做:索引numpy数组的中间值?

x = np.arange(10) 
middle = x[len(x)/4:len(x)*3/4] 

是否有索引的数组中的简写?例如,n2n元素关闭到len(x)/2?有没有这个好的n维版本?

+0

我不认为有除了你创造的东西之外,它是一种更好的方式。库中最类似的东西可能是['np.fft.fftshift'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fftshift.html),它将数组移到将中间放在索引0处。 – Jaime 2013-03-06 21:07:23

+0

是的,这是我考虑的另一个选项,但它不是更好:您需要执行'x = np.concatenate([np.fftshift [:n],np。 fftshift [-n:]])'或类似的。 – keflavich 2013-03-07 00:32:50

+1

这似乎只是使这个函数(例如,'mid = lambda x:x [len(x)/ 4:len(x)* 3/4]')将是最简单的解决方案。 – cge 2013-03-07 22:18:47

回答

5

cge说,最简单的方法就是把它变成一个lambda函数,就像这样:

x = np.arange(10) 
middle = lambda x: x[len(x)/4:len(x)*3/4] 

或n维的方法是:

middle = lambda x: x[[slice(np.floor(d/4.),np.ceil(3*d/4.)) for d in x.shape]] 
+0

快进4年,现在会产生警告“VisibleDeprecationWarning:使用非整数而不是整数将在未来导致错误”。 – kabammi 2017-10-31 23:41:36