4

a100 個の x、y、z 座標のセットで構成される2D 配列 があります。

[[ 0.81  0.23  0.52]
 [ 0.63  0.45  0.13]
 ...
 [ 0.51  0.41  0.65]]

b座標が 0.00 ~ 1.00 の範囲の x、y、z 次元のそれぞれに 101 ピクセルの 3D バイナリ イメージを作成したいと思います。で定義された位置のピクセルaは値 1 を取り、他のすべてのピクセルは値 0 を持つ必要があります。

を使用して正しい形状のゼロの配列を作成できますが、b = np.zeros((101,101,101))座標とスライスをそれに割り当てて、を使用してゼロの配列を作成するにはどうすればよいaですか?

4

2 に答える 2

4

まず、float を int に安全に丸めることから始めます。コンテキストでは、この質問を参照してください。

a_indices = np.rint(a * 100).astype(int)

次に、これらのインデックスを 1 に割り当てます。ただし、配列の代わりにb通常のものを使用するように注意してください。そうしないと、インデックス配列の使用がトリガーされます。この方法のパフォーマンスは、代替手段のパフォーマンスに匹敵するようです (@Divakar に感謝! :-)list

b[list(a_indices.T)] = 1

説明するために、サイズが 100 ではなく 10 で、3 ではなく 2 次元の小さな例を作成しました。

>>> a = np.array([[0.8, 0.2], [0.6, 0.4], [0.5, 0.6]])
>>> a_indices = np.rint(a * 10).astype(int)
>>> b = np.zeros((10, 10))
>>> b[list(a_indices.T)] = 1
>>> print(b) 
[[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]
 [ 0.  0.  0.  0.  1.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]]
于 2016-08-30T06:07:10.253 に答える