python的array和matrix有什么不同

其实python的array和matrix的最大区别在于其乘法的实现不同,这里之所以着重说一下,主要是因为在写一个基于强化学习的四旋翼模型时遇到这个问题(RL-DRONE).先说乘法的不同,看下面的一段代码就明白了:

import numpy as np
a = np.array([[1,2,3]])
b = np.array([[1],[2],[3]])
a_new = np.mat([[1,2,3]])
b_new = np.mat([[1],[2],[3]])
c = a*b
c_new = a_new*b_new
print('数组乘法:a*b=\n',c)
print('矩阵乘法 a*b= ',c_new)

运行结果如下:

数组乘法:a*b=
 [[1 2 3]
 [2 4 6]
 [3 6 9]]
矩阵乘法 a*b=  [[14]]

这里就可以看出,array的乘法是每个元素的相乘.这个是很好理解的,下面我们再看二者的第一行元素有什么不同:

import numpy as np
a = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])
b = np.mat([[1,2,3],
              [4,5,6],
              [7,8,9]])
print('数组的第一行元素: ',a[0,:])
print('矩阵的第一行元数: ',b[0,:])

输出结果如下:

/home/fc/PycharmProjects/fc/venv/bin/python /home/fc/桌面/四旋翼建模/Quadcopter_simulator-master/test.py
数组的第一行元素:  [1 2 3]
矩阵的第一行元数:  [[1 2 3]]

Process finished with exit code 0

好像没有什么区别啊,仔细看会发现,矩阵的第一行元素多了一个中括号,别小看这个括号,我们知道在我们画图的时候,设置坐标的时候是单中括号的,这也就是我写程序遇到的问题,先贴上代码:

        for key in self.quads:
            R = rotation.rotation_DCM(self.quads[key]['orientation'])
            L = self.quads[key]['L']
            points = np.mat([ [-L,0,0], [L,0,0], [0,-L,0], [0,L,0], [0,0,0], [0,0,0] ]).T
            points = np.dot(R,points)
            points[0,:] += self.quads[key]['position'][0,0]
            points[1,:] += self.quads[key]['position'][0,1]
            points[2,:] += self.quads[key]['position'][0,2]
            points = np.array(points)#这里转成array类型是为了后面的set_dat需要是以为数据,若是mat则会报错
            self.quads[key]['l1'].set_data(points[0,0:2],points[1,0:2])
            self.quads[key]['l1'].set_3d_properties(points[2,0:2])
            self.quads[key]['l2'].set_data(points[0,2:4],points[1,2:4])
            self.quads[key]['l2'].set_3d_properties(points[2,2:4])
            self.quads[key]['hub'].set_data(points[0,5],points[1,5])
            self.quads[key]['hub'].set_3d_properties(points[2,5])

这里我们如果不把mat数据类型转换成array则会程序无法运行,因为画图报错.其实很好理解的是,内部封装的函数赋值是array形式,因为matrix是按维度访问的,大家可以试一试输出 c [ 0 ] [ 0 ] c n e w [ 0 ] [ 0 ] 就知道了

猜你喜欢

转载自blog.csdn.net/qq_28773183/article/details/80475947