gpt4 book ai didi

python - numpy 数组 1.9.2 获取 ValueError : could not broadcast input array from shape (4, 2) 形状 (4)

转载 作者:太空狗 更新时间:2023-10-29 17:34:56 25 4
gpt4 key购买 nike

以下代码在 numpy 1.7.1 中工作,但在当前版本中给出值错误。我想知道它的根本原因。

    import numpy as np
x = [1,2,3,4]
y = [[1, 2],[2, 3], [1, 2],[2, 3]]

a = np.array([x, np.array(y)])

以下是我在 numpy 1.7.1 中得到的输出

>>>a
array([[1, 2, 3, 4],
[array([1, 2]), array([2, 3]), array([1, 2]), array([2, 3])]], dtype=object)

但相同的代码在 1.9.2 版本中会产生错误。

    ----> 5 a = np.array([x, np.array(y)])

ValueError: could not broadcast input array from shape (4,2) into shape (4)

我找到了一个可能的解决方案。但我不知道这是否是最好的做法。

b= np.empty(2, dtype=object)
b[:] = [x, np.array(y)]

>>> b
array([[1, 2, 3, 4],
array([[1, 2],
[2, 3],
[1, 2],
[2, 3]])], dtype=object)

请提出一个解决方案以实现所需的输出。谢谢

最佳答案

您到底想生产什么?我没有 1.7 版本来测试您的示例。

np.array(x) 生成一个 (4,) 数组。 np.array(y)一个(4,2)

如评论中所述,在 1.8.1 中 np.array([x, np.array(y)]) 产生

ValueError: setting an array element with a sequence.

我可以创建一个对象数据类型数组,由列表和数组组成

In [90]: np.array([x, np.array(y)],dtype=object)
Out[90]:
array([[1, 2, 3, 4],
[array([1, 2]), array([2, 3]), array([1, 2]), array([2, 3])]], dtype=object)

我还可以连接 2 个数组来制作一个 (4,3) 数组(x 是第一列)

In [92]: np.concatenate([np.array(x)[:,None],np.array(y)],axis=1)
Out[92]:
array([[1, 1, 2],
[2, 2, 3],
[3, 1, 2],
[4, 2, 3]])

np.column_stack([x,y]) 做同样的事情。


奇怪的是,在 dev 1.9 中(我没有安装 production 1.9.2)它可以工作(有点)

In [9]: np.__version__
Out[9]: '1.9.0.dev-Unknown'

In [10]: np.array([x,np.array(y)])
Out[10]:
array([[ 1, 2, 3, 4],
[174420780, 175084380, 16777603, 0]])
In [11]: np.array([x,np.array(y)],dtype=object)
Out[11]:
array([[1, 2, 3, 4],
[None, None, None, None]], dtype=object)
In [16]: np.array([x,y],dtype=object)
Out[16]:
array([[1, 2, 3, 4],
[[1, 2], [2, 3], [1, 2], [2, 3]]], dtype=object)

所以看起来正在进行某种开发。

在任何情况下,从这个列表中创建一个新数组和一个二维数组都是不明确的。使用 column_stack(假设您想要一个 2d int 数组)。


numpy 1.9.0 发行说明:

The performance of converting lists containing arrays to arrays using np.array has been improved. It is now equivalent in speed to np.vstack(list).

通过转置 y vstack 工作:

In [125]: np.vstack([[1,2,3,4],np.array([[1,2],[2,3],[1,2],[2,3]]).T])
Out[125]:
array([[1, 2, 3, 4],
[1, 2, 1, 2],
[2, 3, 2, 3]])

如果 1.7.1 有效,并且 x 是字符串名称,而不仅仅是您示例中的整数,那么它可能正在生成一个对象数组。

关于python - numpy 数组 1.9.2 获取 ValueError : could not broadcast input array from shape (4, 2) 形状 (4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32909619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com