roc*_*ves 5 python arrays numpy
我有一个二维数组,其中每个元素都是傅里叶变换。我想“对数”地分割变换。例如,让我们取其中一个数组并将其命名为a:
a = np.arange(0, 512)
# I want to split a into 'bins' defined by b, below:
b = np.array([0] + [10 * 2**i for i in range(6)]) # [0, 10, 20, 40, 80, 160, 320, 640]
Run Code Online (Sandbox Code Playgroud)
我想做的是类似于 using 的东西np.split,除了我想根据数组将值拆分为“容器”,b这样a[0, 10) 之间的所有值都在一个容器中,[10, 20) 之间的所有值都在一个容器中在另一个等等
我可以用某种复杂的 for 循环来做到这一点:
split_arr = []
for i in range(1, len(b)):
fbin = []
for amp in a:
if (amp >= b[i-1]) and (amp < b[i]):
fbin.append(amp)
split_arr.append(fbin)
Run Code Online (Sandbox Code Playgroud)
我有很多数组要拆分,而且这很丑陋(只是我的意见)。有没有更好的办法?
以下是您可以使用的方法np.split:
np.split(a, np.searchsorted(a,b))
Run Code Online (Sandbox Code Playgroud)
如果您的数组a未排序,请在上述命令之前对其进行排序:
a = np.sort(a)
Run Code Online (Sandbox Code Playgroud)
np.searchsortedb查找将插入到已排序数组中的值的位置a。换句话说,np.searchsorted找到要分割数组的位置。如果您不想要开头的空数组,只需0从 中删除即可b。