在numpy中,有些操作以(R, 1)的形式返回,但有些返回(R,)。这将使矩阵乘法更加繁琐,因为需要显式的reshape。例如,给定一个矩阵M,如果我们想要执行numpy.dot(M[:,0], numpy.ones((1, R))),其中R是行数(当然,同样的问题也会在列上发生)。我们将得到matrices are not aligned错误,因为M[:,0]的形状是(R,),而(R, 1)0的形状是(R, 1)1。
所以我的问题是:
形状(R, 1)和(R,)之间的区别是什么。我知道字面上它是一个数字的列表和列表的列表所有的列表都只包含一个数字。只是想知道为什么不设计numpy,这样它更喜欢形状(R, 1),而不是(R,),以便于矩阵乘法。
对于上面的例子有没有更好的方法?不需要像这样显式地重塑:numpy.dot(M[:,0].reshape(R, 1), numpy.ones((1, R)))