MATLAB与PYTHON交互学习(上)

MATLAB与PYTHON交互学习(上)

一,序号

matlab所有数据存储格式的序号均从1开始,而python和大多数编程语言一样从0开始。python中的矩阵为numpy中的array格式。

二,矩阵

1,matlab中矩阵在内存中内存中按列存储,如矩阵:
aa=

 1     2     3     4
 2     3     4     5

在matlab中a(3)=2,也就是说如果兑换成更加严格的语言的数组的话,a相当于一个二维数组a[4][2],即是一个含有4个元素的数组,每个元素为一个含有两个元素的数组。因此,行矩阵相当于一个二维数组,列矩阵相当于一个一维数组。这一点从matlab函数编译成dll后的C++的接口转换形式中可以得到验证。
如下,代码为一个为向量的输入,被转换成dll后的接口初始化的部分代码:

    static int iv[1] = {4};
    /* Set the size of the array.
    Change this size to the value that the application requires. */
    result = emxCreateND_real_T(1, iv);//一维数组

如下,代码为一个为向量的输入,被转换成dll后的接口初始化的部分代码:

static int iv[2] = { 1, 4};
    int idx1;
    /* Set the size of the array.
    Change this size to the value that the application requires. */
    result = emxCreateND_real_T(2, iv)//二维数组

2,python中的矩阵,在一定程度上在外观表现上和数组更像,如:
aa
array([[1, 2, 3, 4],
[2, 3, 4, 5]])
而且在初始化的时候不像matlab必须使用中括号,python很随便,如下四种形式都能达到建立矩阵的效果:

aa=np.array([[1,2,3,4],[2,3,4,5]])
aa=np.array(((1,2,3,4),[2,3,4,5]))
aa=np.array(([1,2,3,4],[2,3,4,5]))
aa=np.array(([1,2,3,4],(2,3,4,5)))

从目前的经验来看,python是按行存储的,即一行为一个数组。如果将array看做数组的话,上述矩阵为aa[2][4],更像打多数编程语言的写法。与matlab去元素的方式不同,python若想取出一个元素,需要给出详细坐标,如aa[0][1]=2,而且矩阵操作只能使用中括号。python中也可以像matlab中取出某行和某列元素,用法和matlab一致,只不过由小括号变成了中括号

三,常用函数

1,在matlab中矩阵计算方差,均值,求和等函数名称在python中没有变化:var,mean,sum……。但是用法发生了较大的区别,matlab默认是以列为单位进行计算入var(aa) 结果为[0.5000 0.5000 0.5000 0.5000],若想以行为单位计算需要添加参数。
python中var默认将计算array中的所有元素,因此在python中var(aa) 结果为1.5 ,python 中的var也可以像matlab一样,通过参数来调整是按行计算还是按列计算,var(aa,0)按列计算,var(aa,1)按行计算。但是需要注意,python中var中使用的方差函数默认分母为N(元素数),而matlab默认为N-1,因此会有如下结果:
matlab:

var(a)
ans =
    0.5000    0.5000    0.5000    0.5000

python:

np.var(aa,axis=0)
In [68]: array([0.25, 0.25, 0.25, 0.25])

matlab可以选择分母为N的,控制分母的变量在matlab的var中的第二个位置,此位置为1则除N,为0则除N-1。如下:

 var(a,1,1)
ans =
    0.2500    0.2500    0.2500    0.2500
 var(a,0,1)
ans =
    0.5000    0.5000    0.5000    0.5000

python 也可以通过参数控制来选择分母为N或者N-1,如下:

np.var(aa,axis=0,ddof=1)
array([0.5, 0.5, 0.5, 0.5])
np.var(aa,axis=0,ddof=0)
array([0.25, 0.25, 0.25, 0.25])

其他类似函数雷同

猜你喜欢

转载自blog.csdn.net/u012140304/article/details/67644246
今日推荐