Python ogrid的数据类型(以numpy为单位)是可指定的吗?

Python ogrid的数据类型(以numpy为单位)是可指定的吗?,python,numpy,memory,array-broadcasting,Python,Numpy,Memory,Array Broadcasting,在python的numpy中,为什么ogrid总是产生int64结果 对于我的应用程序,我不想使用int64,因为内存有限(稍后将输出组件一起广播时会出现内存限制)。有没有比事后重铸更好的替代方案: y, x = np.ogrid[:9000,:9000] y = y.astype(np.int16) x = x.astype(np.int16) 对于大多数其他numpy调用,更简洁的解决方案是使用dtype=…可选参数,但是ogrid不是作为函数调用的。相反,它似乎与诸如a+b之类的运算符类

在python的
numpy
中,为什么
ogrid
总是产生
int64
结果

对于我的应用程序,我不想使用
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)
的可选项,您可以使用
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)]

另一种选择是更直接地使用
np.newaxis

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