【问题标题】:matrix multiplication of arrays in pythonpython中数组的矩阵乘法
【发布时间】:2011-04-15 08:14:36
【问题描述】:

我觉得问这个有点傻,但我似乎找不到答案

在 Numpy 中使用数组我想将 3X1 数组乘以 1X3 数组并得到一个 3X3 数组作为结果,但是因为点函数总是将第一个元素视为列向量,而将第二个元素视为行向量我可以'似乎为了让它工作,我必须使用矩阵。

A=array([1,2,3])  
print "Amat=",dot(A,A)  
print "A2mat=",dot(A.transpose(),A)  
print "A3mat=",dot(A,A.transpose())  
u2=mat([ux,uy,uz])  
print "u2mat=", u2.transpose()*u2  

还有输出:

Amat= 14  
A2mat= 14  
A3mat= 14  
u2mat=  
 [[ 0.  0.  0.]  
        [ 0.  0.  0.]  
        [ 0.  0.  1.]]

【问题讨论】:

    标签: python arrays numpy matrix


    【解决方案1】:

    np.outer 是内置的:

    A = array([1,2,3])
    print( "outer:", np.outer( A, A ))
    

    (transpose 不起作用,因为A.T 与一维数组的 A 完全相同:

    print( A.shape, A.T.shape, A[:,np.newaxis].shape )
    >>> ( (3,), (3,), (3, 1) )
    

    )

    添加:np.add.outer 添加元素对 -- np.outer 很像 np.multiply.outer。和 np.ufunc.outer (A, B) 将对与任何 二进制ufunc

    【讨论】:

    • +1,不知道 np.outer - 但它看起来正是您所需要的。
    【解决方案2】:
    >>> A=np.array([1,2,3])
    >>> A[:,np.newaxis]
    array([[1],
           [2],
           [3]])
    >>> A[np.newaxis,:]
    array([[1, 2, 3]])
    >>> np.dot(A[:,np.newaxis],A[np.newaxis,:])
    array([[1, 2, 3],
           [2, 4, 6],
           [3, 6, 9]])
    

    【讨论】:

      【解决方案3】:

      实现这一点的一种方法是使用 matrix 类/类型。

      import numpy as np
      A = np.matrix([1,2,3])
      B = A.T  #transpose of A
      
      >>> B*A 
      >>> matrix([[1, 2, 3],
          [2, 4, 6],
          [3, 6, 9]])
      

      属于矩阵类的对象的行为与数组几乎相同。实际上数组和矩阵是可以互换的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2011-11-20
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        相关资源
        最近更新 更多