Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数学函数从MATLAB转换为Python_Python_Matlab_Numpy_Sum_Sign - Fatal编程技术网

数学函数从MATLAB转换为Python

数学函数从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

我目前正在从事一个项目,该项目涉及将一个在MATLAB中运行的程序转换为Python,以提高速度和效率。然而,我遇到了一个绊脚石。首先,我对MATLAB中的tilde(~)表示什么以及如何在python中以相应的方式表示它感到困惑。其次,我一直在搜索文档,我也很难在MATLAB中找到“符号”函数的等效函数

    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
,这意味着迭代所有维度。谢谢