3

我有 2 个数组 [nx1] 分别存储 xpixel(样本)和 ypixel(线)坐标。我有另一个数组 [nxn] 存储图像。我想做的是创建第三个数组,它将图像数组中的像素值存储在给定坐标处。我有这个与以下一起工作,但想知道内置的 numpy 函数是否会更有效。

#Create an empty array to store the values from the image.
newarr = numpy.zeros(len(xsam))

#Iterate by index and pull the value from the image.  
#xsam and ylin are the line and sample numbers.

for x in range(len(newarr)):
    newarr[x] = image[ylin[x]][xsam[x]]

print newarr

随机生成器确定 xsam 和 ylin 的长度以及通过图像的行进方向。因此,每次迭代都完全不同。

4

2 回答 2

3

Ifimage是一个 numpy 数组并且ylin,xsam是一维的:

newarr = image[ylin, xsam]

如果ylin,xsam是二维的,第二维是1eg,ylin.shape == (n, 1)则首先将它们转换为一维形式:

newarr = image[ylin.reshape(-1), xsam.reshape(-1)]
于 2012-11-20T21:32:07.823 回答
3

您可以使用高级索引

In [1]: import numpy as np
In [2]: image = np.arange(16).reshape(4, 4)
In [3]: ylin = np.array([0, 3, 2, 2])
In [4]: xsam = np.array([2, 3, 0, 1])
In [5]: newarr = image[ylin, xsam]
In [6]: newarr
array([ 2, 15,  8,  9])
于 2012-11-20T21:27:51.580 回答