Python 将一段八度(mrdivide)代码转换为numpy
我试图将一段倍频程代码转换为numpy,但我从倍频程和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
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