栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

MATLAB转python细节粗糙自用记录版

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MATLAB转python细节粗糙自用记录版

文章目录
    • 一篇很好的文章:
    • 我遇到的问题
      • 深浅拷贝
      • 数组边界
      • 数组内按序号检索
      • 待补全

一篇很好的文章:

(知乎)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判断。

待补全
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号