我认为一般来说 NumPy 函数需要形状数组(r,c)
对一维数组没有特殊考虑。相反,他们希望用户传递一个形状数组(r,c)
确切地说,或者让用户传递一个一维数组广播 http://www.scipy.org/EricsBroadcastingDoc达到形状(r,c)
.
如果你向这样的函数传递一个形状的一维数组(c,)
它将广播形成(1,c)
,因为广播在左侧添加了新轴。还可以广播塑造(r,c)
对于任意的r
(取决于它与哪个其他数组组合)。
另一方面,如果你有一个一维数组,x
,形状(r,)
你需要它来传播形状(r,c)
,那么 NumPy 期望用户传递一个形状数组(r,1)
因为广播不会为您添加右侧的新轴。
为此,用户必须通过x[:,np.newaxis]
而不仅仅是x
.
关于返回值:我认为最好总是返回一个二维数组。如果用户知道输出的形状(1,c)
,并且想要一个一维数组,让她切掉一维数组x[0]
她自己。
通过使返回值始终具有相同的形状,可以更容易地理解使用此函数的代码,因为输入的形状并不总是立即显而易见。
此外,广播模糊了一维形状数组之间的区别(c,)
和一个二维形状数组(r,c)
。如果您的函数在输入一维输入时返回一个一维数组,在输入二维输入时返回一个二维数组,那么您的函数会严格区分而不是模糊区分。从风格上来说,这让我想起检查if isinstance(obj,type)
,这违背了鸭子类型的原则。如果没有必要,就不要这样做。