这是一个最小的工作示例:
x_data = np.linspace(-5, 5, num=50)
y_data = 2.9 * np.sin(1.5 * x_data) + np.random.normal(size=50)
def test_func(x, *c):
a = c[0][0]
b = c[0][1]
return a * np.sin(b * x)
p0 = np.array([[2,2],[2,2]])
params, params_covariance = curve_fit(test_func, x_data, y_data, p0)
print(params)
这将返回
IndexError: invalid index to scalar variable.
我认为问题在于p0
是一个矩阵,而curve_fit
很难将其作为第一次猜测。有办法使它起作用吗?
PS:我知道,在上面的示例中,p0
不必是矩阵,我可以将函数定义为test_func(x, a, b)
并用作第一个猜测{ {1}}。但是,上面的示例只是我的代码的简化,在我的代码中,我确实需要第一个猜测p0=[2,2]
作为矩阵。
答案 0 :(得分:0)
只需将其作为普通参数传递,并使用索引选择值即可。
def f(m):
print(m[0,0]) # --> 0
print(m[0,1]) # --> 1
print(m[1,0]) # --> 2
print(m[1,1]) # --> 3
params = np.array([[0,1],[2,3]])
f(params)
或者如果您不知道数组的大小:
def f(m):
for i in range(m.shape[0]):
for j in range(m.shape[1]):
print(m[i,j])
答案 1 :(得分:0)
这是访问和更改numpy数组中某些元素的函数的小示例:
import numpy as np
params = np.array([[0,1],[2,3]])
def fn(a):
print(a[0][0])
a[0][0] = 5
fn(params)
print(params[0][0])
注意:我们在这里不使用*
来表示对params
的引用,就像在其他语言(如C)中那样。这是因为默认情况下np.array
传递了该引用,因此我们可以在fn()
函数中访问和编辑传递的数组中的元素。