- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一段较大的代码,其核心是将函数与数据相匹配。要拟合的数据和函数是动态的。最近我向整个系统附加了一个额外的数据点,现在 curve_fit
总是返回初始猜测(或太接近它的东西),无论我如何选择它。对于非常不同的 y 值和 x 值(十组前者,两组后者)会发生这种情况。
我知道选择起始值很重要,但我以前从未遇到过使用默认值的问题(我的函数通常很简单)并且可以通过取消注释添加附加数据的新代码来恢复到正常工作的状态观点。现在人们会认为新代码显然是问题所在,但在新添加和实际将数据馈送到 curve_fit
之间有相当多的步骤。我已经检查过 curve_fit
的输入类型是否相同:np.ndarray
,在有问题的情况下只有一个元素长。
但是,在创建 MWE 时,我注意到它只是导致问题的确切 x 数组。当我在我的 MWE 中复制主程序的打印 x 向量而不是内部表示时,它完全消失了。因此我只能用外部文件来说明问题:local_z.npy [150kB]
MWE:
import numpy as np
from scipy.optimize import curve_fit
values = np.array([[1.37712972, 1.58475346, 1.78578759, 1.9843099, 1.73393093],
[-0.0155715, -0.01534987, -0.00910744, -0.00189728, -1.73393093],
[1.23613934, 0.76894505, 0.18876817, 0.06376843, 1.1637315 ],
[0.8535248, 0.53093829, 0.13033993, 0.04403058, 0.80352895],
[0.51505805, 0.32039379, 0.0786534, 0.02657018, 0.48488813]])
heights = np.array([ 22.110203, 65.49054, 110.321526, 156.54034, 166.59094])
local_z = np.load('local_z.npy')
print('difference in heights', local_z - heights)
def func(z, a0, a1):
return a0 + a1*z
for v in values:
popt_non_working = curve_fit(func, local_z, v)[0]
print('not working: ', popt_non_working)
popt_working = curve_fit(func, heights, v)[0]
print('working: ', popt_working)
我使用 Python 2.7.6、numpy 1.14.1 和 scipy 1.0.0 的输出:
$ python auxiliary/SUBLIME_fit_test.py
('difference in heights', array([-2.10693358e-07, -4.49218746e-07, -4.26269537e-07, 4.23828126e-06, 2.38281251e-06]))
/home/csag5117/venv/local/lib/python2.7/site-packages/scipy/optimize/minpack.py:785: OptimizeWarning: Covariance of the parameters could not be estimated category=OptimizeWarning)
('not working: ', array([1., 1.]))
('working: ', array([1.35420488, 0.00325281]))
('not working: ', array([1., 1.]))
('working: ', array([ 0.38896878, -0.00714073]))
('not working: ', array([1., 1.]))
('working: ', array([ 1.06301278, -0.00363439]))
('not working: ', array([1., 1.]))
('working: ', array([ 0.73398503, -0.00250946]))
('not working: ', array([1., 1.]))
('working: ', array([ 0.442922 , -0.00151433]))
如您所见,我使用 heights
作为 x 值的版本按预期工作(返回拟合参数),而我使用存储的 `local_z' 的版本没有,甚至尽管两个阵列之间的差异非常小。我只显示多个 y 值以表明这不是百万分之一的故障,可以通过适当的起始值来修复。这也只是一个示例,我还有一个具有相同行为的更多数据点(24 个而不是 5 个)。
为了完整起见,我添加了代码块(当我关闭它时一切正常)。有趣的是,通过在 MWE 中使用 local_z[:-1]
遗漏 local_z
中的最后一个值(这是代码块添加的值)并没有修复问题。
zi_minus_dd -= 1
zf_long = np.append(out.zf, np.squeeze(data.zf[t])[z_mask_full[-1] + 1])
u_zi = np.interp(zi_minus_dd, zf_long,
np.append(out.u, np.squeeze(data.u[t])[z_mask_full[-1] + 1]))
v_zi = np.interp(zi_minus_dd, zf_long,
np.append(out.v, np.squeeze(data.v[t])[z_mask_full[-1] + 1]))
th_zi = np.interp(zi_minus_dd, zf_long,
np.append(out.th, np.squeeze(data.th[t])[z_mask_full[-1] + 1]))
zh_long = np.append(out.zh, np.squeeze(data.zh[t])[z_mask_full[-1] + 1])
uw_zi = np.interp(zi_minus_dd, zf_long,
np.append(out.uw_raw, np.squeeze(data.uw[t])[z_mask_full[-1] + 1]))
vw_zi = np.interp(zi_minus_dd, zf_long,
np.append(out.vw_raw, np.squeeze(data.vw[t])[z_mask_full[-1] + 1]))
tke_zi = np.interp(zi_minus_dd, zf_long,
np.append(out.tke, np.squeeze(data.TKE[t])[z_mask_full[-1] + 1]))
out.zf = np.append(out.zf, zi_minus_dd)
out.u = np.append(out.u, u_zi)
out.v = np.append(out.v, u_zi)
out.th = np.append(out.th, u_zi)
out.zh = np.append(out.zh, zi_minus_dd)
out.uw_raw = np.append(out.uw_raw, u_zi)
out.vw_raw = np.append(out.vw_raw, u_zi)
out.tke = np.append(out.tke, u_zi)
out.zf
和out.zh
是后面做成local_z
的向量。整个代码相当大,并且还依赖于 netCDF 文件(上面代码段中的 data
)。我已经问过了here ,但那是工作代码。
我很困惑,不知道如何解决这个问题,甚至不知道如何继续调试。 copy vs deepcopy 或类似的问题是否可能存在问题?虽然我想知道如何通过存储数组将其传输到 MWE...
最佳答案
追踪这个很有趣。 :-)
这不是值,而是它们的类型。这是一个精度问题:有效的 heights
是 float64,无效的 local_z 只是 float32。
我们有
In [70]: heights
Out[70]: array([ 22.110203, 65.49054 , 110.321526, 156.54034 , 166.59094 ])
In [71]: heights.dtype
Out[71]: dtype('float64')
In [72]: curve_fit(func, heights, v)[0]
Out[72]: array([1.35420488, 0.00325281])
和
In [73]: local_z
Out[73]:
array([ 22.110205, 65.49054 , 110.321526, 156.54034 , 166.59094 ],
dtype=float32)
In [74]: curve_fit(func, local_z, v)[0]
C:\Python\lib\site-packages\scipy\optimize\minpack.py:794: OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
Out[74]: array([1., 1.])
但如果我们愿意,我们可以让 local_z 工作:
In [75]: curve_fit(func, local_z.astype(np.float64), v)[0]
Out[75]: array([1.35420488, 0.00325281])
或高度失败:
In [76]: curve_fit(func, heights.astype(np.float32), v)[0]
C:\Python\lib\site-packages\scipy\optimize\minpack.py:794: OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
Out[76]: array([1., 1.])
关于python - Scipy curve_fit 仅针对非常特定的 x 值静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52390002/
我在使用以下代码时遇到问题: function http_file_exists($url){ $f=fopen($url,"r"); if($f){ fclose($f); retu
我已经通过 Git 部署到 Azure 几个月了,没有出现重大问题,但现在我似乎遇到了一个无法克服的错误。 我创建了一个新的 Azure 网站,为正在开发的项目创建单独的预览链接。我在新站点上设置了
我已经通过flutter创建了一个App并完成了它,我想在flutter文档中阅读时进行部署。 我收到此错误: FAILURE: Build failed with an exception. * W
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
我正在尝试使用 RapidJSON 解析从服务器接收到的数据。以下是收到的确切字符串: [ { "Node": "9478149a08f9", "Address": "172.17
我尝试为 ios 编译 OpenCV。我总是收到这些错误。我用不同版本的opencv试了一下,结果都是一样的。 我运行这个:python 平台/ios/build_framework.py ios_o
我在一台机器上做基本的发布/订阅,我的客户端是 StackExchange-Redis 的 C# 客户端,我在同一台机器上运行基于 Windows 的 Redis 服务器(服务器版本 2.8.4) 当
我有这段代码,但无法执行,请帮我解决这个问题 连接 connect_error) { die ("connection failed: " . $terhubung->connect_erro
我在 tomcat 上运行并由 maven 编译的 Web 应用程序给出了以下警告和错误。我可以在本地存储库中看到所有 JAR,但有人可以帮忙吗。 WARNING: Failed to scan JA
我正在 Windows 8 上使用 Android Studio 开发一个 android 应用程序,我正在使用一些 native 代码。突然间我无法编译我的 C 文件。当我运行 ndk-build
下面的代码对类和结构的成员进行序列化和反序列化。序列化工作正常,但我在尝试使用 oarch >> BOOST_SERIALIZATION_NVP(outObj); 反序列化时遇到了以下错误; 代码中是
如果我运行此命令“rspec ./spec/requests/api/v1/password_reset_request_spec.rb”,此文件中的所有测试都会通过。 但是,当我运行“rspec”时
我在尝试执行测试以使用 Protractor 上传文件时出错,我的代码是这个 it('it should be possible to upload a file', function() {
System.loadLibrary("nativefaceswap"); 当我运行我的应用程序时,我在 Android Studio 中发现了此类错误。在logcat中显示: java.lang.U
我希望有人能帮助我!使用任何方法或命令行的任何 SSL/HTTPS 调用均无效。 我在 Windows 10 中使用 Ubuntu Server 18.04 作为子系统。我的问题是昨天才开始出现的,因
通过删除这两个值将日期字段从 null=True 和 Blank=True 更改为 required 时,使用 db.alter 命令时遇到问题。 当以下行被注释掉时,迁移运行不会出现问题。
我第一次使用 Heroku 尝试创建应用程序(使用 SendGrid 的 Inbound Parse Webhook"和 Twilio SMS 通过电子邮件发送和接收 SMS 消息)。通过 Virtu
我正在将我的 swift 项目更新到 Xcode 7 上的 Swift 2.0。xcode 在构建项目时报告了以下错误: 命令/Applications/Xcode.app/Contents/Deve
在我的代码中,SSL 库函数 SSL_library_init() 没有按预期返回 1。我如何才能看到它返回了什么错误? 我在 SSL_library_init() 之后调用了 SSL_load_er
我正在尝试运行在以下链接中找到的答案: Asynchronously Load the Contents of a Div 但是当我这样做时,我会遇到我不太理解的错误。 我的代码: $(documen
我是一名优秀的程序员,十分优秀!