我有一个任意长度的数组,我想选择其中的N个元素,它们之间的间隔均匀(大约N可能是偶数,数组长度可能是素数,等等),其中包括第一个arr[0]
元素和最后一个arr[len-1]
元素。
例:
>>> arr = np.arange(17)
>>> arr
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
然后,我想制作一个类似于以下的函数,以numElems
在数组内均匀地抓取空间,该数组必须包含第一个和最后一个元素:
GetSpacedElements(numElems = 4)
>>> returns 0, 5, 11, 16
这有意义吗?
我已经尝试过arr[0:len:numElems]
(即使用数组start:stop:skip
表示法)和一些细微的变化,但是我在这里找不到想要的东西:
>>> arr[0:len:numElems]
array([ 0, 4, 8, 12, 16])
要么
>>> arr[0:len:numElems+1]
array([ 0, 5, 10, 15])
我并不在乎中间元素是什么,只要它们均匀间隔开,就可以说索引为1。但是获取正确数量的元素(包括索引零和最后一个索引)至关重要。
希望有人可以帮助我找到快速的单班轮,谢谢!
要获取等间距索引的列表,请使用np.linspace
:
idx = np.round(np.linspace(0, len(arr) - 1, numElems)).astype(int)
接下来,索引回去arr
以获取相应的值:
arr[idx]
在强制转换为整数之前,请始终使用舍入。在内部,在提供dtype参数时linspace
调用astype
。因此,此方法不等效于:
# this simply truncates the non-integer part
idx = np.linspace(0, len(array) - 1, numElems).astype(int)
idx = np.linspace(0, len(arr) - 1, numElems, dtype='int')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句