matlab支持python3.5_将Matlab代码转换为python3.5+

这两个问题是,Python代码在很多地方与MATLAB代码做的事情不一样,而且Python代码在多个地方都是无效的。在

首先,在MATLAB代码中,这一行继续循环,直到到达文件末尾:while(feof(D_P)==0)%。显然,您正试图对python中的这一行执行相同的操作:if line == '':。但是,它只在行为空时运行代码。在

你可以在python中使用这种方法,但是你不应该这样做。这将自动循环D_P的行,将每一行放入变量line。另外,您应该使用with open ("distance_profil.txt","r") as D_P:安全地打开和关闭文件,就像ReadFile函数中所做的那样。您可以使用enumerate来跟踪带有for i, line in enumerate(D_P):的索引。你还试着把每一行读两遍,这意味着你真的每一行都读了。在

下一个问题是这行cA= np.array(sign)。您不能在任何地方定义sign变量。它是在ReadFile()函数中定义的,您永远不会使用它,应该删除它。因此,它不是使用sign变量,而是使用scipy.sign函数,如果您定义了sign变量,您将覆盖该函数。这就是为什么from ___ import *是个坏主意。使用import scipy as sp或类似的东西。但是,您不需要这样做,因为您只使用一个scipy函数,它是单独导入的。在

与MATLAB不同,函数是Python中的一类对象。你可以像其他变量一样使用它们。因此,您正在创建一个包含一个函数的数组,而不是您显然想要的数字数据。但是,对于需要数字输入的dwt函数,这将失败。您需要做的是将文本行转换成一个数字数组。在ReadLine中使用的方法是可以的,除了它读取错误的文件并读取整个文件而不是一行,您是从某个地方复制的吗?然而,这不是一个很好的方法。最好使用np.fromstring(line.strip(), sep=' ')。这将把字符串解释为由空格分隔的一系列数字(替换为您需要的任何内容),并将其转换为numpy数组。这更快更容易。在

接下来,使用dwt函数,将^{赋值给array[cA[i,], cD[i,]]。因为没有array变量,所以这不是您想要的,也不会起作用。如果array是一个2D numpy数组,这将把dwt的结果分配给与cA和cD的索引{}对应的坐标处的索引。您只想分配给cA和cD。这意味着您还可以删除cA和cD的早期定义。在

然后,使用dwt调用,将输入包装在[]中。在Python中,它将列表作为单个参数传递,而不是作为所需的两个参数。在MATLAB中,它也不起作用,因为它会尝试将一个数字数组与一个字符数组连接起来(这将失败),并将其作为单个输入传递给函数。所以pywt.dwt(sign, 'db2')。在

所以这行应该是:cA, cD = pywt.dwt(sign, 'db2')。在

另外,您可以使用cdH几个地方,但从未定义它。它应该是cD?同样,对于cdH([i,]),MATLAB没有区分函数调用和数组访问,但是python有。您需要使用方括号[],并且只需要使用方括号来编制索引。cdH([i,])将被解释为“使用列表输入[i,]调用函数{},这将不起作用,因为{}不是一个函数(如果定义了它,则不会是函数)。后面的逗号也是多余的。所以你只要做cdh[i]。在

接下来,将loc定义为空列表,然后定义locs,然后执行loc = [loc, locs]。{{cd47}是有效的。然而,在python中,这将创建一个看起来像[[], locs]的列表,这是完全不同的。你应该把这三条线减少到[pks,loc] = find_peaks_cwt(abs(cdH([i,]),'threshold',3)。在

另外,在下面,您要写sign(2*locs)。正如我所说,您需要使用括号来编制索引,因此这需要是sign[2*locs]。在

接下来,python没有mod函数。使用%在Python中做模数。我不确定带一个参数的mod在你的MATLAB版本中做了什么,在我的版本中它会引发错误。但是,从上下文来看,我假设您正在尝试获取小数部分,即locs%1。在

最后,您要plt.plot(abs(cdH(i,)),locs,mod(locs),'ro')。MATLAB和Python都不知道如何用这样的三个数组进行绘图。您要么需要像MATLAB代码那样将plt.plot(abs(cdH(i,)))拆分成自己的plot命令,要么将np.arange(len(cdH(i,)))作为plot的第一个参数。和另一个情节一样。在

总的来说,您似乎对MATLAB或Python(或两者)都不太熟悉。在再次尝试编写类似的代码之前,有必要先温习一下这两个方面的基础知识。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值