假设我有一个0d Numpy数组:
x = numpy.asarray(1.)
字符串
它的类型为numpy.ndarray
。但现在在x
上操作:
y = 1.*x
型
现在它的类型为numpy.float64
。使用所有Numpy函数时也是如此。例如,numpy.sin(x)
的类型为numpy.float64
。
为什么?
现在假设我有一个函数,在操作过程中,该函数必须提升数组的维度(执行一些检查或其他):
def fun(x):
x = np.asarray(x)
if x.ndim == 0:
x = x[None]
# Perform some checks and operate on x
return x.squeeze()
型
为了与Numpy保持一致,我希望这个函数在传递浮点数时返回numpy.float64
。但就目前而言,它返回0d数组。我可以返回1.*x.squeeze()
,但这似乎非常丑陋。这个问题有规范的解决方案吗?
1条答案
按热度按时间fcipmucu1#
一个python标量,一个0d数组和一个numpy标量:
字符串
正如
numpy scalars
页面所指出的,这样的标量和0d数组之间有很多重叠。它们都可以被索引
型
关键的区别是标量不能改变:
型
为什么很多操作返回一个标量而不是一个0d数组?我猜是有一个“finalize”方法来做这种“清理”。关于子类数组的文档谈到了这种终结。
有几种方法可以使这样的数组至少是一维的。
型
np.squeeze
明确指出,它将返回一个0d数组,而不是一个numpy标量。我不知道有任何其他操作做出这样的区分。np.inscalar
的文档可能在以下方面具有指导意义:型
isscalar
是python代码,有几个isinstance
测试。