我正在尝试使用影响函数来了解黑盒模型。使用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的数组。.非常感谢您对理解该数组的任何帮助!
答案 0 :(得分:0)
首先,您需要调整所有数组的形状以使其具有相同的维数。
然后应将其转换为numpy数组
a2 = [a.reshape(-1, 2) for a in a2]
a2 = np.array(a2)