ValueError: object is too deep for the desired array

""" ___ """ from scipy.optimize import root import numpy as np LENGTH = 3 def process(x): return x[0, 0] + x[0, 1] * 5 def draw(process, length): """ """ X = np.matrix(np.random.normal(0, 10, (length, 2))) y = np.matrix([process(x) for x in X]) y += np.random.normal(3, 1, len(y)) return yT, XT def maximum_likelyhood(y, X): def objective(b): return (XT * (y - X * bT)) x0 = np.matrix([0, 0]) res = root(objective, x0=x0) return res.x y, X = draw(process, LENGTH) X = X.transpose() b = np.matrix([[0], [1]]) print maximum_likelyhood(y, X) 

creates

  Traceback (most recent call last): File "ml.py", line 33, in <module> maximum_likelyhood(y, X) File "ml.py", line 26, in maximum_likelyhood res = root(objective, x0=x0) File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/_root.py", line 168, in root sol = _root_hybr(fun, x0, args=args, jac=jac, **options) File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 193, in _root_hybr ml, mu, epsfcn, factor, diag) ValueError: object too deep for desired array 

I can’t even breathe, that the problem is that he is in b, which is aimed at functioning? or is it in his output?

+4
source share
1 answer

The problem is that fsolve and root do not accept matrices as the return value of the objective function.

For example, this is the solution to the problem above:

 def maximum_likelyhood(y, X): def objective(b): b = np.matrix(b).T return np.transpose(np.array((XT * (y - X * b))))[0] x0 = (1, 1) res = root(objective, x0=x0) return res.x 
+11
source

Source: https://habr.com/ru/post/1444869/


All Articles