matlab和python语法方面的差异

同为脚本语言,matlab和python在算法优化过程中都不可避免的会涉及到,甚至有些情况下会涉及到两种语言程序的互相转换,这几天我刚好也做了相关工作,需要将之前用matlab写的一个小算法模块转换成python,以方便和模型集成,过程不难,但因为需要同时涉及两种语言的书写风格,并且这两种语音在某些方面还挺相似,难免会一时混淆,遂简单整理一下形成此篇博文,方便区分及后续查阅。

矩阵相关处理

矩阵维度及成员的差异

matlab中,多维矩阵的维度是固定的,如果维度不统一,定义的时候就会报错

而python中,数组的成员不单单可以是数,也可以是列表等

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
a.shape # (3,4)
a.ndim # 2
>>> print(a) #二维数组
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
print(type(a))
<class 'numpy.ndarray'>

b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
b.shape # (3,)
b.ndim # 1
>>> print(b) #一维数组,数组成员是不同维度的列表
[list([1, 2, 3, 4]) list([5, 6, 7, 8]) list([9, 10, 11])]
>>> print(type(b))
<class 'numpy.ndarray'>

矩阵索引和切片

matlab和python中的矩阵索引和切片非常相似,但存在很多细微差异,这些细微差异经常会是导致数据对不上的原因。
  • matlab默认取值从1开始计数,而python默认从0开始计数
    即matlab中A(2),对应 python中A[1];

  • 边界值是否取到的差异
    matlab中A(2:5)是A(2)-A(5)四个数,而python中A[2:5]是A[2]--A[4]三个数,并且注意因为第一点差异的存在A(2不等于A[2];

  • matlab中使用(),而python中numpy使用[]
    python中的()表示元组。

  • python中矩阵名是指针,需要特别注意矩阵的赋值

>>>  a=np.array([1,2,3])
>>> b=a
>>> a
array([1, 2, 3])
>>> b
array([1, 2, 3])
>>> a[1]=10
>>> a
array([ 1, 10,  3])
>>> b
array([ 1, 10,  3])

而matlab中不涉及:

>>  a=[1,2,3];
>> b=a;
>> a
a =
        1  2  3
>> b
b =
        1  2  3
>> a[2]=10;
>> a
a =
        1  10  3
>> b
b =
        1  2  3

一些常用矩阵操作

不管是matlab还是python,都可以对矩阵进行一些整体操作。 比如:
  • 对每个元素进行(+,-,*,/)
% matlab
A+1   %每个元素+1
A.^2  %每个元素平方
A[A<=0]=0  %将A中小于0的值赋为0
# python
A+1   #每个元素+1
A**2  #每个元素平方
np.where(A> 0, A, 0)

循环

循环是代码中常用的逻辑,matlab和python的简单差异是:

matlab:

for i = [1:10]
    process;
end

python:

for i in  range(10):
    process

一些常用函数

操作 matlab python
长度 length len
取对数 log10 math.log10
滤波器 filter scipy.signal.lfilter
直方图 histogram np.histogram
posted @ 2024-02-26 19:24  lulu_yeah  阅读(245)  评论(0)    收藏  举报