【问题标题】:np.asarray error: could not broadcast input array from shape (2,2) into shape (2)np.asarray 错误:无法将输入数组从形状 (2,2) 广播到形状 (2)
【发布时间】:2019-08-05 17:41:27
【问题描述】:

我正在尝试使用影响函数来理解黑盒模型。我在使用包含 2 个功能和 2 个类的玩具数据集时遇到广播错误。下面,我使用两个列表 a1 和 a2 总结了实际错误。

a1 = [array([[-0.00491985,  0.00491965],
        [-0.00334969,  0.00334955],
        [-0.00136081,  0.00136076]], dtype=float32),
 array([-0.00104678,  0.00104674], dtype=float32)]

a2 =
[array([[-0.00334969,  0.00334955],
        [-0.00136081,  0.00136076]], dtype=float32),
 array([-0.00104678,  0.00104674], dtype=float32)]

我正在尝试使用 np.asarray() 将上述两个列表转换为数组

print(np.asarray(a1))
array([array([[-0.00491985,  0.00491965],
       [-0.00334969,  0.00334955],
       [-0.00136081,  0.00136076]], dtype=float32),
       array([-0.00104678,  0.00104674], dtype=float32)], dtype=object)

虽然 np.asarray(a1) 工作正常,但 np.asarray(a2) 会抛出以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-51-3060768e9016> in <module>()
----> 1 np.asarray(a2)

/home/devi/.local/lib/python3.5/site-packages/numpy/core/numeric.py in asarray(a, dtype, order)
    536 
    537     """
--> 538     return array(a, dtype, copy=False, order=order)
    539 
    540 

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

我浏览了许多描述广播错误的论坛,但仍然无法弄清楚 np.asarray() 的工作方式。

当 list 的元素是维度 (3x2) 和 (1x2) 的数组时,np.asarray() 返回一个长度为 2 的数组。而当元素的维度是 (2x2) 和 (1x2) 时,为什么它抛出一个错误?而不是像前一种情况那样返回一个长度为 2 的数组。任何理解相同的帮助将不胜感激!

【问题讨论】:

    标签: arrays python-3.x tensorflow numpy-ndarray


    【解决方案1】:

    首先,您需要重塑所有数组以具有相同的数字维度。

    然后你应该把它转换成一个 numpy 数组

    a2 = [a.reshape(-1, 2) for a in a2]
    a2 = np.array(a2)
    

    【讨论】:

    • 非常感谢您的回答。有用!然而,我仍然想知道为什么 a1 不需要这种重塑。 a1 中的元素的形状为 (3,2) 和 (2,)。 a2 中的元素的形状为 (2,2) 和 (2,)。我尝试了另一个示例,其中元素的形状为 (3,3) 和 (3,)。它也抛出了错误。看起来当维度相等时,通过 np.asarray 转换时出现了一些问题。
    • 我也看不懂。也许它是一个错误?尝试打开一个问题到 numpy 的 github 存储库
    猜你喜欢
    • 2020-04-04
    • 2021-06-20
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2017-07-17
    • 2020-06-25
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多