- 一篇很好的文章:
- 我遇到的问题
- 深浅拷贝
- 数组边界
- 数组内按序号检索
- 待补全
(知乎)matlab程序转为Python代码遇到的坑
我遇到的问题 深浅拷贝MATLAB中x0 = b与python中的x0 = b不同,MATLAB中的相等是独立的,改变b或x0时另一个不会发生改变,而python中改变b时x0也会随之改变,即浅拷贝,为了实现和MATLAB相同的效果,需要python深拷贝,方法如下:
# 方法一 import numpy x0 = b.copy() # 方法二 深拷贝 import copy x0 = copy.deepcopy(b) # 方法三 通过乘1避免 x0 = b*1数组边界
MATLAB中a[1,1:2]与python中a[0,0:1]不是等价转换。python中的“0:1”是左闭右开的,等价写法是:a[0,0:2]。
数组内按序号检索MATLAB中a[-1]的返回值为空:[],python中a[-1]的返回值为数组a的最后一个元素值。为了实现和MATLAB相同的效果,我的不太聪明的办法是利用if条件判断,下面示例:
MATLAB代码:
for k = 1:N
x(k) = A(k, 1:k - 1) * x(1:k - 1)
等价的python代码:
import numpy as np
for i in range(0, N):
if i - 1 < 0:
x[i] = np.dot(A[i, 0:0], x[0:0])
elif i - 1 == 0:
x[i] = np.dot(A[i, 0], x[0])
else:
x[i] = np.dot(A[i, 0:i], x[0:i])
此处同样涉及了数组边界问题,在MATLAB中a[0:0]得到的是a[0],而python中a[0:0]得到的是[]空,所以需要额外增加一个elif判断。
待补全


