繁体   English   中英

为什么我在NumPy中的矩阵向​​量乘法产生二维数组而不是一维向量?

[英]Why does my matrix vector multiplication in NumPy yield a two dimensional array instead of a one dimensional vector?

我有一个叫做inverseJ的矩阵,它是一个2x2矩阵( [[0.07908312, 0.03071918], [-0.12699082, -0.0296126]] ),长度为2的一维矢量deltaT[-31.44630082, -16.9922145] )。 在NumPy中,将它们相乘会再次产生一维向量,如本例所示 但是,当我使用inverseJ.dot(deltaT)将它们相乘时,我得到一个二维数组( [[-3.00885838, 4.49657509]] ),唯一的元素是我实际要寻找的向量。 有谁知道为什么我不是简单地得到一个载体? 任何帮助是极大的赞赏!

整个脚本供参考

from __future__ import division
import sys
import io
import os
from math import *
import numpy as np

if __name__ == "__main__":
    # Fingertip position
    x = float(sys.argv[1])
    y = float(sys.argv[2])
    # Initial guesses
    q = np.array([0., 0.])
    q[0] = float(sys.argv[3])
    q[1] = float(sys.argv[4])

    error = 0.01
    while(error > 0.001):
        # Configuration matrix
        T = np.array([17.3*cos(q[0] + (5/3)*q[1])+25.7*cos(q[0] + q[1])+41.4*cos(q[0]),
                        17.3*sin(q[0] + (5/3)*q[1])+25.7*sin(q[0] + q[1])+41.4*sin(q[0])])

        # Deviation
        deltaT = np.subtract(np.array([x,y]), T)
        error = deltaT[0]**2 + deltaT[1]**2
        # Jacobian
        J = np.matrix([ [-25.7*sin(q[0]+q[1])-17.3*sin(q[0]+(5/3)*q[1])-41.4*sin(q[0]), -25.7*sin(q[0]+q[1])-28.8333*sin(q[0]+(5/3)*q[1])],
                        [25.7*cos(q[0]+q[1])+17.3*cos(q[0]+(5/3)*q[1])+41.4*cos(q[0]),      25.7*cos(q[0]+q[1])+28.8333*cos(q[0]+(5/3)*q[1])]])
        #Inverse of the Jacobian
        det = J.item((0,0))*J.item((1,1)) - J.item((0,1))*J.item((1,0))
        inverseJ = 1/det * np.matrix([  [J.item((1,1)),     -J.item((0,1))],
                                        [-J.item((1,0)),    J.item((0,0))]])
        ### THE PROBLEMATIC MATRIX VECTOR MULTIPLICATION IN QUESTION
        q = q + inverseJ.dot(deltaT)

matrix参与操作时,输出是另一个matrix matrix对象是严格线性代数意义上的矩阵。 它们总是2D,即使它们只有一个元素。

相反,您提到的示例使用数组 ,而不是矩阵。 数组更“松散”。 其中一个区别是“无用”尺寸被移除,在此示例中产生1D向量。

这似乎只是numpy.dot()函数的方式。 它进行简单的数组乘法,由于其中一个参数是二维的,因此返回一个二维数组。 点()是不是一个聪明的方法,它只是做什么它没有从我可以在文档中收集的完整性检查告知这里 请注意,这不是代码中的错误,但您必须自己提取内部列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM