ogrid的dtype,以numpy为单位,是可以指定的吗?



在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,:]

最新更新