[英]Increment 3D array of counters from 2D list of indices (x,y,z) using: Python Numpy Slicing
我想從事件(x,y,t)的2D數組中增加計數器的3D矩陣(nparray),以下代碼起作用:
TOF_cube=np.zeros((324,324,4095),np.int32) #initialise a 3d array for whole data set
data = np.fromfile(f, dtype='<i2', count=no_I16) #read all events, x,y,t as 1D array
data=data.reshape(events,cols)
xpos=data[:,0]
ypos=data[:,1]
tpos=data[:,2]
i=0
while i < events:
TOF_cube[xpos[i],ypos[i],tpos[i]] += 1
i+=1
要使用切片和索引,我將while循環替換為
TOF_cube[xpos,ypos,tpos] += 1
但是,與其復制正確的事件數目4365520(通過while循環並獨立檢查),我只記錄4365197。
切片方法為什么會丟失事件?
我在while循環中使用完全相同的切片,並將其用作索引的“參數”。
由於我們不確定您的數據到底是什么樣子,因此很難猜測出實際的問題是什么。 如果這樣做沒有幫助,請舉一個例子,我們可以運行我們的selvs(即,沒有文件f
)。
假設您有x_pos = [1,1,2,3,5]
a = np.zeros(10)
for i in range(len(x_pos)):
a[x_pos[i]]+=1
# gives a = array([ 0., 2., 1., 1., 0., 1., 0., 0., 0., 0.])
但是其他代碼
a[x_pos]+=1
# gives a = array([ 0., 1., 1., 1., 0., 1., 0., 0., 0., 0.])
因此,如果其中一個索引出現兩次,則在簡短版本中僅更新一次。 檢查您的xpos等是否確實如此
PS:我做了一個稍微簡單的版本,只有一個維度,但是規則保持不變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.