【问题标题】:Extracting a range of co-ordinates from a numpy array从 numpy 数组中提取一系列坐标
【发布时间】:2018-04-04 19:18:58
【问题描述】:

我有一个 100x100x100 的 numpy 数组,它表示由 2D 切片组成的 3D 体积。

我想使用从具有最佳信噪比的体积创建的模板,在一堆体积上执行此体积中的对象的互相关。

为了让事情变得更容易,我尝试进行 2D 互相关,然后通过对每个切片执行 scipy correlate2d 然后将该切片放入 3D numpy 数组中来构建 3D 体积。

我已经测试了 correlate2d 函数,一切似乎都可以正常工作,但是我希望能够拉出这些切片中任何一个切片的任何部分,并根据测量的坐标制作我的模板。

#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 命令想要的每个精确坐标填充整个阵列之前,我想知道是否有人知道更简单的方法?

(将所有内容变成列表是为了使其以逗号分隔。我不确定这是否真的需要)

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    如果我理解正确,您的问题是您想从 3D 数组中取出 2D 盒子。如果您希望 2D 框仍表示为一个长度为 1 的轴的 3D 数组,您可以使用:

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

    如果您真的只想要一个二维数组,则可以简化为:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多