JDS*_*JDS 10 python arrays numpy
我有一个任意长度的数组,我想选择它的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])
Run Code Online (Sandbox Code Playgroud)
然后我想创建一个像下面这样的函数numElems来在数组中均匀地间隔开,它必须包含第一个和最后一个元素:
GetSpacedElements(numElems = 4)
>>> returns 0, 5, 11, 16
Run Code Online (Sandbox Code Playgroud)
这有意义吗?
我试过arr[0:len:numElems](即使用数组start:stop:skip符号)和一些细微的变化,但我没有得到我在这里寻找的东西:
>>> arr[0:len:numElems]
array([ 0, 4, 8, 12, 16])
Run Code Online (Sandbox Code Playgroud)
要么
>>> arr[0:len:numElems+1]
array([ 0, 5, 10, 15])
Run Code Online (Sandbox Code Playgroud)
我并不完全关心中间元素是什么,只要它们间隔均匀,偏离指数1即可.但是获得正确数量的元素(包括索引零和最后一个索引)是至关重要的.
希望有人能帮我找到快速的单行程,谢谢!
cs9*_*s95 12
要获得均匀间隔索引的列表,请使用np.linspace:
idx = np.round(np.linspace(0, len(arr) - 1, numElems)).astype(int)
Run Code Online (Sandbox Code Playgroud)
接下来,索引返回arr以获取相应的值:
arr[idx]
Run Code Online (Sandbox Code Playgroud)
在转换为整数之前始终使用舍入.在内部,提供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')
Run Code Online (Sandbox Code Playgroud)