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