3

NxMx3numpy配列がありdtype=objectます。f(a,b,c)この配列の最後の軸にある 3 つの要素を取り、 を返す関数もありますnp.int32f私の質問は、配列に適用して配列NxMx3を生成するにはどうすればよいですか?NxMdtype=np.int32

私の現在の解決策は、使用することです

newarr = np.fromfunction(lambda i,j: f(arr[i,j,0], arr[i,j,1], arr[i,j,2]),
                          arr.shape[:2], dtype=np.int)

これは私が望んでいたよりも少し冗長ですが。

4

1 に答える 1

3

使用できますvectorize

np.vectorize(f, otypes=[np.int32])(arr[:, :, 0], arr[:, :, 1], arr[:, :, 2])

これは、軸のローリングと反復によって単純化できます。

np.vectorize(f, otypes=[np.int32])(*np.rollaxis(arr, 2, 0))

または、配列を明示的に分割することもできますdsplit:

np.vectorize(f, otypes=[np.int32])(*np.dsplit(arr, 3))[..., 0]

また

np.vectorize(f, otypes=[np.int32])(*np.dsplit(arr, 3)).reshape(arr.shape[:-1])

また

np.vectorize(f, otypes=[np.int32])(*np.dsplit(arr, 3)).squeeze()

ただし、apply_along_axisおそらくもっと簡単です:

np.apply_along_axis(lambda x: f(*x), 2, arr)
于 2012-10-12T22:23:29.067 に答える