在 numpy 中,ogrid 的 dtype 是否可以指定?

Is the dtype of an ogrid, in numpy, specifiable?

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

对于我的应用程序,我不想使用 int64,因为内存限制(当输出组件稍后一起广播时会发挥作用)。有没有比重铸 post-hoc:

更好的选择
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,:]