【发布时间】:2017-01-25 10:34:07
【问题描述】:
我尝试用 Numpy 做矩阵点积和转置,我发现数组可以做矩阵可以做的很多事情,例如点积、点积和转置。
当我必须创建一个矩阵时,我必须先创建一个数组。
示例:
import numpy as np
array = np.ones([3,1])
matrix = np.matrix(array)
由于我可以在数组类型中进行矩阵转置和点积,因此我不必将数组转换为矩阵来进行矩阵运算。
例如,以下行是有效的,其中 A 是一个 ndarray :
dot_product = np.dot(A.T, A )
前面的矩阵运算可以用matrix类变量A来表示
dot_product = A.T * A
运算符 * 与 ndarray 的逐点乘积完全相同。因此,它使 ndarray 和 matrix 几乎无法区分并引起混淆。
混淆是一个严重的问题,正如REP465中所说的
使用 numpy.matrix 编写代码也可以正常工作。但麻烦开始于 只要我们尝试将这两段代码集成在一起。代码 需要一个 ndarray 并获得一个矩阵,反之亦然,可能会崩溃或 返回不正确的结果。跟踪期望的功能 哪些类型作为输入,哪些类型作为输出返回,然后 一直来回转换,非常麻烦 不可能在任何规模上都正确。
如果我们坚持ndarray,弃用matrix,用.inverse()、.hermitian()、outerproduct等矩阵运算方法支持ndarray,那会很诱人()等,在未来。
我仍然必须使用 matrix 类的主要原因是它将一维数组作为二维数组处理,所以我可以转置它。
到目前为止,我如何转置一维数组非常不方便,因为大小为 n 的一维数组的形状为 (n,) 而不是 (1,n)。例如,如果我必须做两个数组的内积:
A = [[1,1,1],[2,2,2].[3,3,3]]
B = [[1,2,3],[1,2,3],[1,2,3]]
np.dot(A,B) 工作正常,但如果
B = [1,1,1]
,它的转置仍然是一个行向量。
当输入变量的维度未知时,我必须处理这个异常。
我希望这可以帮助一些遇到同样麻烦的人,并希望知道是否有更好的方法来处理像 Matlab 中的矩阵运算,尤其是一维数组。谢谢。
【问题讨论】:
标签: python arrays matlab numpy