簡體   English   中英

從一個numpy數組中提取一系列坐標

[英]Extracting a range of co-ordinates from a numpy array

我有一個100x100x100 numpy數組,它表示由2D切片組成的3D體積。

我想使用從具有最佳信噪比的卷創建的模板,在這些卷中的一堆上對該對象執行互相關。

為了使事情變得容易,我嘗試進行2D互相關,然后通過在每個切片上進行scipy relatede2d並將該切片放入3D numpy數組中來構建3D體積。

我已經測試了relatede2d函數,並且看起來一切正常,但是我希望能夠提取這些切片中任何一個的任何部分,並根據測量的坐標來制作我的模板。

#inputdata, a 3D numpy array with x , y and z image data.
mrc = np.array((mrcfileinput.data))

#The measured coords for the template I want to box out
xtake = np.array(range(64,77))
ytake = np.array([50])
ztake = np.array(range(9,32))

#checking the range is correct
print (xtake, ytake, ztake)

#turning them into lists although not sure this is needed
xlist = list(xtake)
ylist = list(ytake)
zlist = list(ztake)

#attempting to implement numpy.take with very little luck
template = np.take(mrc, ([xlist],[ylist],[zlist]))

print (template)

所以我最初的想法是測量要裝箱的盒子的兩個角。 這本質上是一個2D框(y軸保持在50)。 這似乎與numpy take命令配合使用不太好。 在我離開之前,想一想如何用所需的每一個確切的共丹石填充整個陣列,我想這就是take命令想要的,我想知道是否有人知道更簡單的方法?

(將所有內容都放入列表中是為了使它用逗號分隔。我不確定是否確實需要這樣做)

如果我理解正確,那么您的問題是您想從3D陣列中取出2D盒子。 如果要將2D框仍表示為3D數組,且其一個軸的長度為1,則可以使用:

template = mrc[64:77, 50:51, 9:32]  # shape (13, 1, 23)

相反,如果您確實只想要2D數組,則可以簡化為:

template = mrc[64:77, 50, 9:32]  # shape (13, 23)

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM