【发布时间】:2012-01-07 09:25:48
【问题描述】:
我的理解是,numpy 中的一维数组可以解释为面向列的向量或面向行的向量。例如,形状为(8,) 的一维数组可以被视为形状为(1,8) 或形状为(8,1) 的二维数组,具体取决于上下文。
我遇到的问题是,我编写的用于操作数组的函数在二维情况下倾向于很好地泛化以处理向量和矩阵,但在一维情况下却不是很好。
因此,我的函数最终会执行以下操作:
if arr.ndim == 1:
# Do it this way
else:
# Do it that way
甚至这个:
# Reshape the 1-D array to a 2-D array
if arr.ndim == 1:
arr = arr.reshape((1, arr.shape[0]))
# ... Do it the 2-D way ...
也就是说,我发现我可以泛化代码来处理二维情况 (r,1)、(1,c)、(r,c),但不能泛化处理没有分支或重塑的一维情况。
当函数对多个数组进行操作时,它会变得更加丑陋,因为我会检查并转换每个参数。
所以我的问题是:我错过了一些更好的成语吗?我上面描述的模式是 numpy 代码共有的吗?
另外,作为API设计原则的相关问题,如果调用者将一维数组传递给某个返回新数组的函数,并且返回值也是一个向量,那么通常的做法是重塑一个二维数组吗? D 向量 (r,1) 或 (1,c) 返回一维数组,还是简单地记录该函数无论如何都返回一个二维数组?
谢谢
【问题讨论】:
标签: python numpy vectorization api-design