我正在学习Python和numpy,并且对鸭子打字的想法很陌生。 我正在编写函数,某物/某人应该在其中传递一个 numpy 数组。 尝试接受鸭子类型,我正在编写代码以将numpy.array
与copy=
和ndmin=
选项一起使用,以将array_likes或 1d/0d 数组转换为我需要的形状。 具体来说,我在可以接受(p,p)
数组或标量的情况下使用 ndmin=
选项;标量可以编码为int
、(1,)
数组、(1,1)
数组、[1]
列表等...
因此,为了解决这个问题,我正在使用类似 S = numpy.array(S,copy=False,ndmin=2)
的东西来获取具有正确ndim
的数组(如果可能),然后根据需要测试形状。 我知道我应该将其嵌入到 Try-Except 块中,但找不到任何关于numpy.array()
可能引发的异常类型的文档。 因此,我目前只有这个:
# duck covariance matrix into a 2d matrix
try:
S = numpy.array(S, ndmin = 2, copy=False)
except Exception as e:
raise e
我应该尝试在此处捕获哪些特定异常? 谢谢。
将函数记录为接受array_like对象,并将异常处理留给调用方。
numpy.array()
是非常宽松的函数,它几乎可以转换为数组。
尝试使用 np.asarray
将输入转换为数组。如果输入已经是 Numpy 数组,则保证不会复制任何内容。如果希望接收array
子类,请使用 np.asanyarray
。
请注意,许多 Numpy 接口并不关心输入是 1 维还是 2 维 - 例如,np.dot
同时适用于 1 维和 2 维输入。最好保持这种方式 - 这样,像标量乘法这样的东西就可以了。