基于另一个数组“对数”分割数组中的值

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)

我有很多数组要拆分,而且这很丑陋(只是我的意见)。有没有更好的办法?

Ehs*_*san 5

以下是您可以使用的方法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