Numpy: BUG:np.array在尺寸部分匹配的数组列表上失败

创建于 2016-03-23  ·  8评论  ·  资料来源: numpy/numpy

应用于数组列表时,函数numpy.array和numpy.asarray具有明确定义的行为:如果列出的数组具有相同的尺寸和大小,则将列表转换为结果数组的尺寸之一(我们称其为“模式1”)。 如果不是,则返回一个数组数组(“模式2”)。

但是,“模式2”中numpy.array和numpy.asarray的行为似乎取决于数组中的项目数。 以下代码相对于numpy有用性不是很好,但是可以工作:

>>> a = np.array([1, 2, 3])
>>> b = np.array([[1, 0], [0, 1]])
>>> np.asarray([a, b])
array([array([1, 2, 3]), array([[1, 0],
       [0, 1]])], dtype=object)

但是以下不是:

>>> a = np.array([1, 2])
>>> b = np.array([[1, 0], [0, 1]])
>>> np.asarray([a, b])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.4/dist-packages/numpy/core/numeric.py", line 474, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: could not broadcast input array from shape (2,2) into shape (2)

显然,问题在于,当numpy.asarray看到第一个维度在ab具有相同的长度时,它会尝试采用“模式1”,这在这里是不可能的。

编辑:我正在使用numpy 1.10.4和python 3.4.3。

00 - Bug numpy.core

最有用的评论

提供dtype=object没有帮助-您仍然会遇到相同的错误。
但是,添加一个空数组可以避免它:

arr_of_arr = np.array([np.array([]), a, b])[1:]

所有8条评论

同意,这种后备逻辑是不幸的。 我们已经讨论过除非明确提供dtype,否则不制作dtype=object数组。 IMO np.array([a, b], dtype=object)应该是编写这两种方法的唯一方法-并且它不需要对形状进行任何检查。

提供dtype=object没有帮助-您仍然会遇到相同的错误。
但是,添加一个空数组可以避免它:

arr_of_arr = np.array([np.array([]), a, b])[1:]

在1.14.4中仍然存在

@ppwwyyxx-实际上,部分是因为这不是一件小事,部分是因为它一直没有被别人碰到,所以紧迫性相对较低(而且没有多少人有时间贡献力量...)。

但是,这里可能有帮助的是,使其更准确地明确期望的行为是什么。 @shoyer提到了一个长期的要求,即如果确实需要,则明确要求dtype=object ,否则,对于无法解析为数字或字符串数​​组的任何内容,将筹集TypeError (#5353)。 我最近一直在考虑类似地使用dtype='structured'是否有用,它会严格执行列表之间的区别(表示数组元素)和元组(结构化dtype元素)。

如果有人可以向我发送有关该怎么做的建议,我愿意提供帮助。 我只是看了ctors.c中的相关代码,构造函数逻辑似乎非常复杂,因为它需要处理许多不同形式的输入。

相同的问题:#8330

我认为这可能由#11601解决。 编辑:不是。

因此,这里发生的大致是:

a = np.array([1, 2])
b = np.array([[1, 0], [0, 1]])
out = np.asarray([a, b])
# translates to
out = np.empty((2, 2))  #shape is correctly inferred
out[0,:] = a
out[1,:] = b  # error comes from here
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

navytux picture navytux  ·  4评论

astrofrog picture astrofrog  ·  4评论

manuels picture manuels  ·  3评论

dmvianna picture dmvianna  ·  4评论

Kreol64 picture Kreol64  ·  3评论