gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:52 25 4
gpt4 key购买 nike

我有一个名为 inverseJ 的矩阵,它是一个 2x2 矩阵 ([[0.07908312, 0.03071918], [-0.12699082, -0.0296126]]),还有一个长度为二的维度向量 deltaT ([-31.44630082, -16.9922145])。在 NumPy 中,将它们相乘应该再次产生一个一维向量,如 this example .但是,当我使用 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 对象是严格线性代数意义上的矩阵。它们始终是二维的,即使它们只有一个元素。

相反,您提到的示例使用数组,而不是矩阵。数组更“松散”。其中一个区别是删除了“无用”维度,在此示例中生成一维向量。

关于python - 为什么我在 NumPy 中的矩阵向​​量乘法生成二维数组而不是一维向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46912253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com