我正在使用 Python 开发一个需要大量数值数组计算的项目。不幸的是(或者幸运的是,取决于你的 POV),我对 Python 很陌生,但多年来一直在做 MATLAB 和 Octave 编程(之前的 APL)。我非常习惯于将每个变量自动输入到矩阵浮点数,并且仍然习惯于检查输入类型。
在我的许多函数中,我要求输入 S 为numpy.ndarray
size (n,p)
,因此我必须测试 type(S) 是numpy.ndarray
并获取 values (n,p) = numpy.shape(S)
。一个潜在的问题是输入可能是一个列表/元组/int/etc...,另一个问题是输入可能是一个形状数组()
:S.ndim = 0
。我突然想到我可以同时测试变量类型,解决S.ndim = 0
问题,然后得到这样的尺寸:
# first simultaneously test for ndarray and get proper dimensions
try:
if (S.ndim == 0):
S = S.copy(); S.shape = (1,1);
# define dimensions p, and p2
(p,p2) = numpy.shape(S);
except AttributeError: # got here because input is not something array-like
raise AttributeError("blah blah blah");
虽然它有效,但我想知道这是否有效?ndim 的文档字符串说
如果它还不是 ndarray,则尝试转换。
我们当然知道 numpy 可以轻松地将 int/tuple/list 转换为数组,所以我很困惑为什么会为这些类型的输入引发 AttributeError,而 numpy 应该这样做
numpy.array(S).ndim;
这应该工作。