1

インデックスの完全なセットをN次元の立方体に抽出しようとしてnp.mgridいますが、そのために必要なもののようです。たとえば、np.mgrid[0:4,0:4]すべてのインデックスを含む4x4の行列を同じ形状の配列に生成します。

問題は、別の配列の形状に基づいて、これを任意の次元数で実行したいということです。つまり、任意の次元の配列aがある場合、のようなことをしたいのですidx = np.mgrid[0:a.shape]が、その構文は許可されていません。

作業に必要なスライスを作成することはできnp.mgridますか?それとも、これを行うための他のエレガントな方法はありますか?次の式は私が必要とすることを実行しますが、それはかなり複雑で、おそらくあまり効率的ではありません。

np.reshape(np.array(list(np.ndindex(a.shape))),list(a.shape)+[len(a.shape)])
4

2 に答える 2

2

私は通常np.indicesを使用します:

>>> a = np.arange(2*3).reshape(2,3)
>>> np.mgrid[:2, :3]
array([[[0, 0, 0],
        [1, 1, 1]],

       [[0, 1, 2],
        [0, 1, 2]]])
>>> np.indices(a.shape)
array([[[0, 0, 0],
        [1, 1, 1]],

       [[0, 1, 2],
        [0, 1, 2]]])
>>> a = np.arange(2*3*5).reshape(2,3,5)
>>> (np.mgrid[:2, :3, :5] == np.indices(a.shape)).all()
True
于 2012-11-07T15:53:09.217 に答える
1

私はあなたが求めていることを次のようにすると信じています:

>>> a = np.random.random((1, 2, 3))
>>> np.mgrid[map(slice, a.shape)]
array([[[[0, 0, 0],
         [0, 0, 0]]],


       [[[0, 0, 0],
         [1, 1, 1]]],


       [[[0, 1, 2],
         [0, 1, 2]]]])

ハードコーディングされた寸法の代わりに の形状をnp.mgrid[0:1,0:2,0:3]使用することを除いて、 とまったく同じ結果が得られます。a

于 2012-11-07T15:54:59.270 に答える