将值分配给numpy数组的切片

时间:2016-09-19 15:24:02

标签: python arrays numpy indexing

我想从numpy数组中获取切片并将它们分配给更大的数组。 切片长度应为64,应从源阵列中均匀取出。 我尝试了以下方法:

r = np.arange(0,magnitude.shape[0],step) 
magnitudes[counter:counter+len(r),ch] = magnitude[r:r+64]

当我尝试上面的代码时出现以下错误:

TypeError: only integer arrays with one element can be converted to an index

实现切片的最pythonic方式是什么?

1 个答案:

答案 0 :(得分:2)

magnitude[r:r+64]其中r是一个数组是错误的。切片中的变量必须是标量magnitude[3:67],而不是magnitude[[1,2,3]:[5,6,7]]

如果您想收集多个切片,您必须执行类似

的操作
In [345]: x=np.arange(10)
In [346]: [x[i:i+3] for i in range(4)]
Out[346]: [array([0, 1, 2]), array([1, 2, 3]), array([2, 3, 4]), array([3, 4, 5])]
In [347]: np.array([x[i:i+3] for i in range(4)])
Out[347]: 
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4],
       [3, 4, 5]])

其他SO问题已经探讨了这方面的变化,试图找到最快的,但很难绕过一些排序循环或列表理解。

我建议使用这个答案,如果您认为自己需要更快的速度,请回答一个新问题和一个小例子。