0%

Python学习笔记03

资料:White Paper: MATLAB to Python

Python与MATLAB之间的差异

大致有6点:

  1. 基本数据类型
  2. Package的组织形式
  3. 语法
  4. 索引与切片
  5. NumPy的Array结构
  6. 面向对象与面向过程

这里主要针对后面三点进行说明。

索引与切片

为什么Python中采用从零开始的索引方式?

比对Python和MATLAB的索引方法:

1
2
3
4
# Python
a = [1, 2, 3, 4, 5, 6, 7]
low, high = 2, 4
a == a[0:low] + a[low:high] + a[high:7] # True
1
2
3
4
% MATLAB
a = [1, 2, 3, 4, 5, 6, 7];
low = 2;high = 4;
all(a == [a(1:low), a(low+1:high), a(high+1:end)]) % logical 1

简单来说,MATLAB采用的从一开始的索引方式会带来+1-1的影响,而Python则没有。

NumPy的Array结构
  1. Array可以是多维列阵(包括矩阵),且按行主顺序存储的,而MATLAB则是按列主顺序存储;

  2. 三维Array的形状是(D, R, C),等价于MATLAB中三维矩阵(R, C, D),例如

    R: row, C: column, D: depth

面向对象与面向过程

对比Python和MATLAB的字符串处理:

1
2
3
# Python: Object oriented
sentence = 'the quick brown fox '
sentence.strip().upper().replace(' ', '_') # 'THE_QUICK_BROWN_FOX'
1
2
3
% MATLAB: Procedural
sentence = 'the quick brown fox ';
replace(upper(strip(sentence)), ' ', '_') % 'THE_QUICK_BROWN_FOX'

面向对象的编程方式会让程序的逻辑层次比较清楚,且便于管理。

转变策略

  1. 由下至上:在Python中重构代码
  2. 由上至下:在MATLAB中调用Python

ps. 刚上大一的时候,《大学计算机基础》这门课上老师讲的就是Python(没有教材,也没有考试),这应该是我学的第一门编程语言。当时也是浅藏辄止,后来也没再用过。记得有一个编程作业:求阿姆斯特朗数,当时我就知道int可以取整,靠着一个int函数把程序给写了出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def L(x):
i = 0
while int(x / (10 ** i)) >= 10:
i = i + 1
return i


def Am(x):
l = L(x)
y = 0
while x >= 10:
a = int(x / (10 ** L(x)))
y = y + a ** (l + 1)
x = x - a * 10 ** L(x)
y = y + x ** (l + 1)
return y


for x in range(10, 10000):
if x == Am(x):
print('阿姆斯特朗数:', x)

print('\tEND')