2017-06-30 10 views
1

pythonのnumpyでは、なぜogridはいつもint64の結果を生成しますか?ogridのdtypeはnumpyで指定できますか?

私のアプリケーションでは、出力のコンポーネントが後で一緒に放送されるときに再生されるメモリの制限のため、int64は使用しません。事後作り直すよりも任意のより良い代替手段があります:

y, x = np.ogrid[:9000,:9000] 
y = y.astype(np.int16) 
x = x.astype(np.int16) 

他のほとんどのnumpyのためには、クリーンなソリューションがdtype=...オプションの引数を使用することです呼び出しますが、ogridは関数として呼び出されていません。代わりにのような演算子に匹敵するように見えますが、通常はnp.add(a,b,dtype=np.int8)のような選択肢があります。

答えて

0

もう一つの選択肢は、より直接的にnp.newaxisを使用することです:

y = np.arange(9000, dtype=np.int16)[:,None] 
x = np.arange(9000, dtype=np.int16)[None,:] 
2

あなたはix_と同じ形状を生成し、DTYPEを完全に制御することができ:だけでなく

In [476]: np.ix_(np.arange(5,dtype=float),np.arange(5,dtype=np.int16)) 
Out[476]: 
(array([[ 0.], 
     [ 1.], 
     [ 2.], 
     [ 3.], 
     [ 4.]]), array([[0, 1, 2, 3, 4]], dtype=int16)) 
In [477]: np.ogrid[:5,:5] 
Out[477]: 
[array([[0], 
     [1], 
     [2], 
     [3], 
     [4]]), array([[0, 1, 2, 3, 4]])] 

meshgridを:

In [488]: np.meshgrid(np.arange(5, dtype=float), np.arange(5, dtype=np.int16), sparse=True, indexing='ij') 
Out[488]: 
[array([[ 0.], 
     [ 1.], 
     [ 2.], 
     [ 3.], 
     [ 4.]]), array([[0, 1, 2, 3, 4]], dtype=int16)] 
関連する問題