3

xpixel(サンプル)とypixel(ライン)の座標をそれぞれ格納する2つの配列[nx1]があります。画像を格納する別の配列[nxn]があります。私がやりたいのは、指定された座標で画像配列からのピクセル値を格納する3番目の配列を作成することです。私はこれを次のように動作させていますが、組み込みの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

高度なインデックスを使用できます:

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 に答える
3

imageがnumpy配列である場合ylinxsamは1次元です。

newarr = image[ylin, xsam]

ylinxsamが2次元で、2番目の次元が1egの場合、ylin.shape == (n, 1)最初にそれらを1次元の形式に変換します。

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