我想从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方式是什么?
答案 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问题已经探讨了这方面的变化,试图找到最快的,但很难绕过一些排序循环或列表理解。
我建议使用这个答案,如果您认为自己需要更快的速度,请回答一个新问题和一个小例子。