我的理解是numpy中的1-D数组可以被解释为面向列的向量或面向行的向量.例如,具有形状的1-D阵列(8,)可以被视为形状(1,8)或形状的2-D阵列,(8,1)这取决于上下文.
我遇到的问题是我编写的用于操作数组的函数在2-D情况下倾向于很好地推广以处理向量和矩阵,但在1-D情况下则不太好.
因此,我的函数最终会做这样的事情:
if arr.ndim == 1:
# Do it this way
else:
# Do it that way
Run Code Online (Sandbox Code Playgroud)
甚至这个:
# 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 ...
Run Code Online (Sandbox Code Playgroud)
也就是说,我发现我可以概括代码来处理2-d的情况下(r,1),(1,c),(r,c),但也不是没有分支或重塑1-d的情况.
当函数在多个数组上运行时,它会变得更加丑陋,因为我会检查并转换每个参数.
所以我的问题是:我错过了一些更好的成语吗?我上面描述的模式是否与numpy代码相同?
此外,作为API设计原则的相关问题,如果调用者将1-D数组传递给返回新数组的某个函数,并且返回值也是向量,则通常的做法是重新形成2-D向量(r,1)或(1,c)回到1-D数组或简单地说明该函数返回2-D数组而不管?
谢谢