索引numpy数组的中间?

kef*_*ich 15 python numpy

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

x = np.arange(10)
middle = x[len(x)/4:len(x)*3/4]
Run Code Online (Sandbox Code Playgroud)

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

Cin*_*der 5

正如cge所说,最简单的方法是将其转换为lambda函数,如下所示:

x = np.arange(10)
middle = lambda x: x[len(x)/4:len(x)*3/4]
Run Code Online (Sandbox Code Playgroud)

或者n维方式是:

middle = lambda x: x[[slice(np.floor(d/4.),np.ceil(3*d/4.)) for d in x.shape]]
Run Code Online (Sandbox Code Playgroud)

  • 快进 4 年,现在会产生警告“VisibleDeprecationWarning:使用非整数而不是整数将导致将来出现错误”。 (2认同)

Mer*_*ith 5

晚了,但对于遇到这个问题的其他人来说:更顺畅的方法是使用 numpytakeput.

要寻址数组的中间,可以使用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)

Run Code Online (Sandbox Code Playgroud)