Python:从 numpy 索引数组中提取特定值

Python: extracting specific values out an numpy array of indices

我有一个 numpy 索引数组。例如:

 indices = np.array([0, 1, 2, 6, 7, 9, 12, 13, 14])

我想做一个数组

signals = np.zeros(np.amax(indices) + 1)

我将值 2.0 作为以下形式的序列的起始索引:0、1、2、3 或 8、9、10、11(因此值增加 1)和最后一个元素这个序列是 3.0.

如果序列只有一个数字长(因此没有序列),我会将值 4.0 放入此数组中。

因此对于上面给出的示例,输出应该是 [2.0, 0, 3.0, 0, 0, 0, 2.0, 3.0, 0, 4.0, 0, 0, 2.0, 0, 3.0].

这种问题,一般np.diff就可以解决。我们需要找到每个序列的开始和结束索引;此外,不在任何序列中的值的索引将从找到的索引中删除。最后,signals 将在指定的 indices 中填充指定的值:

# append is used for considering the last element
diff1 = np.diff(indices, prepend=indices[0]-2, append=indices[-1]+2)          # [2 1 1 4 1 2 3 1 1 2]
mask_start = diff1 != 1               # [ True False False  True False  True  True False False  True]
end = np.where(mask_start)[0] - 1     # [-1  2  4  5  8]

# correcting start mask for where a value is not in a sequence
mask4 = np.diff(end, prepend=end[0]-2) == 1
mask4_ind = end[mask4]
mask_start[mask4_ind] = False         # [ True False False  True False False  True False False  True]

# modifying the zero array
signals_copy = signals[indices]
signals_copy[mask_start[:-1]] = 2.0
signals_copy[end[1:]] = 3.0
signals_copy[mask4_ind] = 4.0
signals[indices] = signals_copy

此代码适用于您的示例,并在其他示例中进行了测试。如果您遇到任何可能的缺点,您可以修复此代码。