np.asarray错误:无法将输入数组从形状(2,2)广播到形状(2)

时间:2019-08-05 17:41:27

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

我正在尝试使用影响函数来了解黑盒模型。使用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的数组。.非常感谢您对理解该数组的任何帮助!

1 个答案:

答案 0 :(得分:0)

首先,您需要调整所有数组的形状以使其具有相同的维数。

然后应将其转换为numpy数组

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