4

我正在学习 Python 和 numpy,并且对鸭子类型的想法很陌生。我正在编写函数,某些东西/某人应该将一个 numpy 数组传递给这些函数。试图接受鸭子类型,我正在编写代码以使用numpy.arrayandcopy=选项ndmin=将 array_likes 或 1d/0d 数组转换为我需要的形状。具体来说,我ndmin=在可以接受(p,p)数组或标量的情况下使用该选项;标量可以编码为int(1,)数组、(1,1)数组、[1]列表等...

因此,为了解决这个问题,我使用了类似S = numpy.array(S,copy=False,ndmin=2)的方法来获取一个带有 right 的数组(如果可能的话)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

我应该尝试在此处捕获哪些特定异常?谢谢。

4

2 回答 2

3

将您的函数记录为接受 array_like 对象并将异常处理留给调用者。

numpy.array()是一个非常宽松的函数,它几乎可以转换为数组。

于 2012-09-21T07:51:05.093 回答
0

尝试使用np.asarray将输入转换为数组。如果输入已经是 Numpy 数组,则保证不会复制任何内容。如果您希望接收array子类,请使用np.asanyarray.

请注意,许多 Numpy 接口并不关心输入是 1 维还是 2 维——例如,np.dot适用于 1 维和 2 维输入。最好保持这种状态——这样,标量乘法之类的东西就可以工作了

于 2012-09-21T07:47:25.730 回答