Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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
Python 将一段八度(mrdivide)代码转换为numpy_Python_Numpy_Octave - Fatal编程技术网

Python 将一段八度(mrdivide)代码转换为numpy

Python 将一段八度(mrdivide)代码转换为numpy,python,numpy,octave,Python,Numpy,Octave,我试图将一段倍频程代码转换为numpy,但我从倍频程和numpy得到了不同的结果。以下是我的数据(事实上,它们远远大于下面给出的数据): 及 在八度音阶中,我有x=b'/A。我找不到/对应的numpy函数。到目前为止,我尝试了numpy的x=np.dot(b.T,np.linalg.inv(A)),但结果与倍频程不同 x=b'/A的倍频程结果为: x = Columns 1 through 6: -5.642309525591432e+00 7.813412870218545e+0

我试图将一段倍频程代码转换为numpy,但我从倍频程和numpy得到了不同的结果。以下是我的数据(事实上,它们远远大于下面给出的数据):

在八度音阶中,我有
x=b'/A
。我找不到
/
对应的numpy函数。到目前为止,我尝试了numpy的
x=np.dot(b.T,np.linalg.inv(A))
,但结果与倍频程不同

x=b'/A
的倍频程结果为:

x =

 Columns 1 through 6:

  -5.642309525591432e+00   7.813412870218545e+00  -1.559855155426489e+02  -3.597241224212262e+01   2.201914551287831e+02  -3.100354445411479e+02

 Columns 7 through 12:

   7.253956488595386e+02   7.369595892720794e+01  -4.313273469816049e+02   6.064725968037579e+02  -9.855235323530542e+02  -4.111380598448122e+01

 Columns 13 through 15:

   2.334109900297194e+02  -3.269547704109582e+02   4.254317069619117e+02
numpy的结果是

x=np.array([[-5.642310487492068,    7.813414778371225,  -155.9855165364133, -35.9724138597885,  220.1914623928024,  -310.0354544342263, 725.3956532399461,  73.69596218669903,  -431.3273588509765, 606.472611254314,   -985.5235383154941, -41.11380770278629, 233.4109958125337,  -326.9547770833597, 425.4317096135928]])

如果有人能帮我找到与numpy的八度音阶相同的结果,我将不胜感激。或者比当前更接近倍频程结果。

看起来Matlab和numpy在计算中使用了不同的精度。我会尝试强制两者都使用一些浮点精度

默认情况下,matlab使用16位精度进行数值计算(请参阅)。在这个网站上还描述了如何改变精度

就我而言,numpy使用32位精度(您可能会发现本文很有用:)。

使用两个数组(从您的帖子中复制并粘贴)

并通过
allclose

import numpy as np
np.allclose(x, y) # True

它们(在a中)是相同的。

为了进行测试,请添加DATA的python代码。我刚刚通过
numpy.allclose()
运行了两个数组。它们是一样的。显式计算逆运算会导致较差的结果。改为使用(NumPy也有一个)。您必须将问题从
xA=b
重新写入
Ax=b
@KingStone,实际上代码很长。但是你可以通过
save-6matrix.matab
将数据保存在倍频程中,然后导入到numpy。我需要比1e-5更高的精度?为什么?你知道浮点数本身的精度是有限的吗?我知道,但如果可能的话,我需要更精确(接近倍频程)的结果。谢谢。请记住,显示给您的值可能只是保存值的近似值
x=np.array([[-5.642310487492068,    7.813414778371225,  -155.9855165364133, -35.9724138597885,  220.1914623928024,  -310.0354544342263, 725.3956532399461,  73.69596218669903,  -431.3273588509765, 606.472611254314,   -985.5235383154941, -41.11380770278629, 233.4109958125337,  -326.9547770833597, 425.4317096135928]])
x = [-5.642309525591432e+00, 7.813412870218545e+00, -1.559855155426489e+02, -3.597241224212262e+01, 2.201914551287831e+02, -3.100354445411479e+02, 7.253956488595386e+02, 7.369595892720794e+01, -4.313273469816049e+02, 6.064725968037579e+02, -9.855235323530542e+02, -4.111380598448122e+01, 2.334109900297194e+02, -3.269547704109582e+02, 4.254317069619117e+02]
y = [-5.642310487492068,    7.813414778371225,  -155.9855165364133, -35.9724138597885,  220.1914623928024,  -310.0354544342263, 725.3956532399461,  73.69596218669903,  -431.3273588509765, 606.472611254314,   -985.5235383154941, -41.11380770278629, 233.4109958125337,  -326.9547770833597, 425.4317096135928]
import numpy as np
np.allclose(x, y) # True