我有一個 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].
uj5u.com熱心網友回復:
這類問題,通常可以由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
此代碼適用于您的示例,并在其他一些示例上進行了測驗。如果您遇到任何可能的缺點,您可以修復此代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471428.html
上一篇:如何逐行決議numpy陣列
