Numpy: BUG:混合标量和shape ==(1,)数组时,维发现失败

创建于 2019-12-09  ·  5评论  ·  资料来源: numpy/numpy

np.array([0.25, np.array([0.3])])将无法创建float数组,dtype将为object。

对我来说这似乎是错误的,是故意的吗?

00 - Bug numpy.dtype

所有5条评论

抄送@nschloe ,他反对这种事情,可以联系到他们的问题

感谢CCing。 是的,这确实看起来像是我一直在做的事情。 :smiley_cat: https :

我认为在这里创建对象数组是正确的事情。 毕竟,您要将一个float和一个数组放在一起。 如果您创建了Python列表,

[0.25, np.array([0.3])]

您可能会希望得到相同的结果:第一个条目是一个float,第二个条目是一个长度为1的数组。如果list和np.arrays在这里的行为不同,那将会造成混乱。

同样,在这里隐式创建dtype float数组将使即使我愿意也永远不可能创建[float, vector[1]]数组。

在大多数情况下,指定np.array([0.25, np.array([0.3])])是错误地完成的,并且很容易修复。 参见例如https://github.com/scipy/scipy/pull/11147/files#diff -21a6a0b0d89357857304bfba2da5a971L321。 毕竟,

显式胜于隐式。

好,关闭该PR将使最近的NEP 34更改(自恢复以来)对系统的破坏较小。

@nschloe

即使在此处隐式创建dtype float数组,也将永远无法创建[float,vector [1]]数组。

作为记录,您可以执行np.array(0.3, np.array([0.3]), dtype=object)

如果您创建了Python列表...

NumPy ndarrays与python列表非常不同。 我不会期望
np.array([0.2, 0.3, 0.4])会创建一个对象数组,即使我没有为dtype指定np.float64 。 因此,我们同意我们对某种程度的基于值的自动dtype发现感到满意。 问题是应该优先考虑什么:数字类型或对象类型。

因此,我们同意我们对某种程度的基于值的自动dtype发现感到满意。

我认为这里的“自动化”非常清楚:始终获取可以捕获所有输入值的“最低”数据类型:

numpy.array([1, 2]).dtype   # int64
numpy.array([1, numpy.array(2)]).dtype  # int64, array of rank 0 are basically scalars
numpy.array([1.0, 2]).dtype   # float64
numpy.array([1, [2]]).dtype   # O
此页面是否有帮助?
0 / 5 - 0 等级