索引numpy数组的中间?

时间:2013-03-06 20:25:40

标签: python numpy

要索引numpy数组的中间点,可以执行以下操作:

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

是否有索引数组中间的简写?例如,n2n元素是否接近len(x)/2?这是否有一个很好的n维版本?

2 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:1)

最新,但对于遇到此问题的其他所有人: 一种更平滑的方法是使用numpy的takeput

要解决数组的中间问题,可以使用put用单个索引对n维数组进行索引。与使用take

从数组中获取值相同

假设您的数组中元素的数量为奇数,则数组的中间将是其大小的一半。通过使用整数除法(//而不是/,这里不会有任何问题。

import numpy as np

arr = np.array([[0, 1, 2],
                [3, 4, 5],
                [6, 7, 8]])

# put a value to the center 
np.put(arr, arr.size // 2, 999)
print(arr)

# take a value from the center
center = np.take(arr, arr.size // 2)
print(center)