2017-06-30 32 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不作为函数调用。相反,它似乎与a+b这样的运营商相似,只不过它们通常有替代品,如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_产生相同的形状,并具有D型的完全控制:

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)] 
相关问题