繁体   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