在文档中明确指出int(number)是一种地板类型转换:
int(1.23)
1
Run Code Online (Sandbox Code Playgroud)
当且仅当字符串是整数文字时,int和int(string)才返回一个int.
int('1.23')
ValueError
int('1')
1
Run Code Online (Sandbox Code Playgroud)
这有什么特别的原因吗?我发现在一种情况下功能层是违反直觉的,而不是另一种情况.
我有一大段代码,它的核心功能适合数据.要拟合的数据和功能是动态的.最近我向整个系统添加了一个额外的数据点,现在curve_fit总是返回初始猜测(或者太接近它的东西),无论我如何选择它.这发生在非常不同的y值和x值(前者的10组,后者的两组)中.
我知道选择起始值很重要,但我以前从未遇到过使用默认值(我的函数通常很简单)的问题,并且可以通过取消注释添加附加数据点的新代码来恢复到它正常工作的状态.现在人们会认为显然新代码是问题所在,但新添加和实际提供数据之间有相当多的步骤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 …Run Code Online (Sandbox Code Playgroud)