![](/img/trans.png)
[英]How to replace the first dimension of a 3D numpy array with values from a 1D array?
[英]How to replace identical consecutive values from a 1D array efficiently
令人驚訝的是,經過相當多的研究,我沒有發現任何帖子引發了解決這個簡單問題的好主意。
我有一個形狀為(n, )
的一維numpy
數組,它大部分是零和一些其他正值。
D = np.zeros(10)
D[2] = 1
D[5] = 4
D[7] = 3
Out: array([0., 0., 1., 0., 0., 4., 0., 3., 0., 0.])
但是,有時,其中一個值(它是給定樣本的觸發器)可能會在下一個(或幾個下一個樣本)期間重復。
D = np.zeros(10)
D[2] = 1
D[3] = 1
D[5] = 4
D[7] = 3
Out: array([0., 0., 1., 1., 0., 4., 0., 3., 0., 0.])
在這種情況下,我想處理數組以用 0 替換相同的連續值; 在這種情況下,將第二個1
替換為0
。
In: array([0., 0., 1., 1., 0., 4., 0., 3., 0., 0.])
Out: array([0., 0., 1., 0., 0., 4., 0., 3., 0., 0.])
對於一個額外的復雜度級別,我想定義一個容差,如果值x>0
之后的每個元素都足夠接近x
,那么它們將被 0 替換。
In: array([0., 0., 1., 0.98, 1.01, 4., 0., 3., 3.1, 0.]), tolerance = 0.05
Out: array([0., 0., 1., 0., 0., 4., 0., 3., 3.1, 0.])
這很容易通過使用while
或for
循環在數組上循環來實現。 然而,由於這是一個在線應用程序,我一直在 numpy 中尋找矢量化解決方案。 如果有人有任何建議,任何 function 我可以考慮盡可能高效地執行此操作,請發表評論!
嘗試像這樣使用np.diff()
:
D[np.where(np.diff(D)==0)] = 0
編輯:包括OP的解決方案,包括公差和前置:
D[np.where(np.diff(D, prepend=[0])<=tolerance)] = 0
編輯 2:@obchardon 刪除不必要的np.where
的極好建議:
D[abs(np.diff(D, prepend=[0]))<=tolerance] = 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.