数学函数从MATLAB转换为Python
我目前正在从事一个项目,该项目涉及将一个在MATLAB中运行的程序转换为Python,以提高速度和效率。然而,我遇到了一个绊脚石。首先,我对MATLAB中的tilde(~)表示什么以及如何在python中以相应的方式表示它感到困惑。其次,我一直在搜索文档,我也很难在MATLAB中找到“符号”函数的等效函数数学函数从MATLAB转换为Python,python,matlab,numpy,sum,sign,Python,Matlab,Numpy,Sum,Sign,我目前正在从事一个项目,该项目涉及将一个在MATLAB中运行的程序转换为Python,以提高速度和效率。然而,我遇到了一个绊脚石。首先,我对MATLAB中的tilde(~)表示什么以及如何在python中以相应的方式表示它感到困惑。其次,我一直在搜索文档,我也很难在MATLAB中找到“符号”函数的等效函数 indi = ~abs(indexd); wav = (sum(sum(wv)))/(length(wv)*(length(wv)-1)); thetau = (sig
indi = ~abs(indexd);
wav = (sum(sum(wv)))/(length(wv)*(length(wv)-1));
thetau = (sign(sign(wv - wav) - 0.1) + 1)/2;
thetad = (sign(sign(wav - wv) - 0.1) + 1)/2;
我已经将前一段代码中的indexd和wv转换为numpy数组。替换~和符号函数的最有效的python方法是什么?如果您使用的是
numpy
,那么您也可以使用~
像MATLAB一样反转。请参阅:。sign
功能也存在于numpy
中。你用。因此,上面的代码很简单:
>>> import numpy as np
>>> indi = ~np.abs(indexd)
>>> wav = (np.sum(wv))/(len(wv)*(len(wv)-1))
>>> thetau = (np.sign(np.sign(wv - wav) - 0.1) + 1)/2
>>> thetad = (np.sign(np.sign(wav - wv) - 0.1) + 1)/2
请注意,在MATLAB中对矩阵使用length
可以找到矩阵中的最大维度,而numpy
使用len
可以获得矩阵中的总行数。假设wv
中的行数大于或等于wv
中的列数,则上述代码将按预期工作。然而,如果您的列多于行,那么您需要找到维度的最大值并使用它来代替。。。因此:
>>> import numpy as np
>>> maxdim = np.max(wv.shape)
>>> indi = ~np.abs(indexd)
>>> wav = (np.sum(wv))/(maxdim*(maxdim-1))
>>> thetau = (np.sign(np.sign(wv - wav) - 0.1) + 1)/2
>>> thetad = (np.sign(np.sign(wav - wv) - 0.1) + 1)/2
默认情况下,上面对所有维度的实际求和调用,因此无需调用嵌套的sum
调用对整个矩阵求和(感谢Divakar!)
完全推荐您到这里,查看从MATLAB到
numpy
的精彩表格和指南:如果您使用的是numpy
,那么您也可以使用~
来反转类似于MATLAB的东西。请参阅:。sign
功能也存在于numpy
中。你用。因此,上面的代码很简单:
>>> import numpy as np
>>> indi = ~np.abs(indexd)
>>> wav = (np.sum(wv))/(len(wv)*(len(wv)-1))
>>> thetau = (np.sign(np.sign(wv - wav) - 0.1) + 1)/2
>>> thetad = (np.sign(np.sign(wav - wv) - 0.1) + 1)/2
请注意,在MATLAB中对矩阵使用length
可以找到矩阵中的最大维度,而numpy
使用len
可以获得矩阵中的总行数。假设wv
中的行数大于或等于wv
中的列数,则上述代码将按预期工作。然而,如果您的列多于行,那么您需要找到维度的最大值并使用它来代替。。。因此:
>>> import numpy as np
>>> maxdim = np.max(wv.shape)
>>> indi = ~np.abs(indexd)
>>> wav = (np.sum(wv))/(maxdim*(maxdim-1))
>>> thetau = (np.sign(np.sign(wv - wav) - 0.1) + 1)/2
>>> thetad = (np.sign(np.sign(wav - wv) - 0.1) + 1)/2
默认情况下,上面对所有维度的实际求和调用,因此无需调用嵌套的sum
调用对整个矩阵求和(感谢Divakar!)
完全推荐您到这里,查看从MATLAB到
numpy
的精彩表格和指南:表示逻辑非
并返回数值的符号。表示逻辑非
并返回数值的符号。实际上,您可以避免使用.sum()
@Divakar-谢谢。我真的忘了。更改了我的帖子。或者保留你所说的np.sum
,做一些类似np.sum(wv)
。没有提到轴,它就在内部分解了。@Divakar-Huh。我认为默认情况下它默认为轴=0
,这意味着遍历所有列。有趣。@Divakar-有趣。我一定会修改我的帖子。谢谢顺便说一句,你说得对。它默认为axis=None
,这意味着迭代所有维度。谢谢实际上,您可以使用.sum()
@Divakar来避免拆开
——谢谢。我真的忘了。更改了我的帖子。或者保留你所说的np.sum
,做一些类似np.sum(wv)
。没有提到轴,它就在内部分解了。@Divakar-Huh。我认为默认情况下它默认为轴=0
,这意味着遍历所有列。有趣。@Divakar-有趣。我一定会修改我的帖子。谢谢顺便说一句,你说得对。它默认为axis=None
,这意味着迭代所有维度。谢谢