1

I'm trying to minimize a function with scipy.optimize.minimize. I have a list of lists as input

X = numpy.array(features) #Convert to 2D numpy array
X = numpy.insert(X, 0, 1, axis=1)
y = numpy.transpose( numpy.matrix(values) )
w = numpy.random.random( (X.shape[0], 1) )

fun = lambda w: sum(numpy.power( y-numpy.matmul( numpy.transpose(w) , X), 2))
w = scipy.optimize.minimize(fun, w) 

But I get the following error on the last line:

ValueError: setting an array element with a sequence.

This means there is something wrong with my conversions from list (values) to 1 x N matrix (y), and from list of list (features) to matrix (X). Below are 10 entries for each.

features =  [[1.865e+01 1.760e+01 1.237e+02 1.076e+03 1.099e-01 1.686e-01 1.974e-01
  1.009e-01 1.907e-01 6.049e-02 6.289e-01 6.633e-01 4.293e+00 7.156e+01
  6.294e-03 3.994e-02 5.554e-02 1.695e-02 2.428e-02 3.535e-03 2.282e+01
  2.132e+01 1.506e+02 1.567e+03 1.679e-01 5.090e-01 7.345e-01 2.378e-01
  3.799e-01 9.185e-02]
 [8.196e+00 1.684e+01 5.171e+01 2.019e+02 8.600e-02 5.943e-02 1.588e-02
  5.917e-03 1.769e-01 6.503e-02 1.563e-01 9.567e-01 1.094e+00 8.205e+00
  8.968e-03 1.646e-02 1.588e-02 5.917e-03 2.574e-02 2.582e-03 8.964e+00
  2.196e+01 5.726e+01 2.422e+02 1.297e-01 1.357e-01 6.880e-02 2.564e-02
  3.105e-01 7.409e-02]
 [1.317e+01 1.866e+01 8.598e+01 5.346e+02 1.158e-01 1.231e-01 1.226e-01
  7.340e-02 2.128e-01 6.777e-02 2.871e-01 8.937e-01 1.897e+00 2.425e+01
  6.532e-03 2.336e-02 2.905e-02 1.215e-02 1.743e-02 3.643e-03 1.567e+01
  2.795e+01 1.028e+02 7.594e+02 1.786e-01 4.166e-01 5.006e-01 2.088e-01
  3.900e-01 1.179e-01]
 [1.205e+01 1.463e+01 7.804e+01 4.493e+02 1.031e-01 9.092e-02 6.592e-02
  2.749e-02 1.675e-01 6.043e-02 2.636e-01 7.294e-01 1.848e+00 1.987e+01
  5.488e-03 1.427e-02 2.322e-02 5.660e-03 1.428e-02 2.422e-03 1.376e+01
  2.070e+01 8.988e+01 5.826e+02 1.494e-01 2.156e-01 3.050e-01 6.548e-02
  2.747e-01 8.301e-02]
 [1.349e+01 2.230e+01 8.691e+01 5.610e+02 8.752e-02 7.698e-02 4.751e-02
  3.384e-02 1.809e-01 5.718e-02 2.338e-01 1.353e+00 1.735e+00 2.020e+01
  4.455e-03 1.382e-02 2.095e-02 1.184e-02 1.641e-02 1.956e-03 1.515e+01
  3.182e+01 9.900e+01 6.988e+02 1.162e-01 1.711e-01 2.282e-01 1.282e-01
  2.871e-01 6.917e-02]
 [1.176e+01 2.160e+01 7.472e+01 4.279e+02 8.637e-02 4.966e-02 1.657e-02
  1.115e-02 1.495e-01 5.888e-02 4.062e-01 1.210e+00 2.635e+00 2.847e+01
  5.857e-03 9.758e-03 1.168e-02 7.445e-03 2.406e-02 1.769e-03 1.298e+01
  2.572e+01 8.298e+01 5.165e+02 1.085e-01 8.615e-02 5.523e-02 3.715e-02
  2.433e-01 6.563e-02]
 [1.364e+01 1.634e+01 8.721e+01 5.718e+02 7.685e-02 6.059e-02 1.857e-02
  1.723e-02 1.353e-01 5.953e-02 1.872e-01 9.234e-01 1.449e+00 1.455e+01
  4.477e-03 1.177e-02 1.079e-02 7.956e-03 1.325e-02 2.551e-03 1.467e+01
  2.319e+01 9.608e+01 6.567e+02 1.089e-01 1.582e-01 1.050e-01 8.586e-02
  2.346e-01 8.025e-02]
 [1.194e+01 1.824e+01 7.571e+01 4.376e+02 8.261e-02 4.751e-02 1.972e-02
  1.349e-02 1.868e-01 6.110e-02 2.273e-01 6.329e-01 1.520e+00 1.747e+01
  7.210e-03 8.380e-03 1.311e-02 8.000e-03 1.996e-02 2.635e-03 1.310e+01
  2.133e+01 8.367e+01 5.272e+02 1.144e-01 8.906e-02 9.203e-02 6.296e-02
  2.785e-01 7.408e-02]
 [1.822e+01 1.870e+01 1.203e+02 1.033e+03 1.148e-01 1.485e-01 1.772e-01
  1.060e-01 2.092e-01 6.310e-02 8.337e-01 1.593e+00 4.877e+00 9.881e+01
  3.899e-03 2.961e-02 2.817e-02 9.222e-03 2.674e-02 5.126e-03 2.060e+01
  2.413e+01 1.351e+02 1.321e+03 1.280e-01 2.297e-01 2.623e-01 1.325e-01
  3.021e-01 7.987e-02]
 [1.510e+01 2.202e+01 9.726e+01 7.128e+02 9.056e-02 7.081e-02 5.253e-02
  3.334e-02 1.616e-01 5.684e-02 3.105e-01 8.339e-01 2.097e+00 2.991e+01
  4.675e-03 1.030e-02 1.603e-02 9.222e-03 1.095e-02 1.629e-03 1.810e+01
  3.169e+01 1.177e+02 1.030e+03 1.389e-01 2.057e-01 2.712e-01 1.530e-01
  2.675e-01 7.873e-02]]


X =  [[1.000e+00 1.865e+01 1.760e+01 1.237e+02 1.076e+03 1.099e-01 1.686e-01
      1.974e-01 1.009e-01 1.907e-01 6.049e-02 6.289e-01 6.633e-01 4.293e+00
      7.156e+01 6.294e-03 3.994e-02 5.554e-02 1.695e-02 2.428e-02 3.535e-03
      2.282e+01 2.132e+01 1.506e+02 1.567e+03 1.679e-01 5.090e-01 7.345e-01
      2.378e-01 3.799e-01 9.185e-02]
     [1.000e+00 8.196e+00 1.684e+01 5.171e+01 2.019e+02 8.600e-02 5.943e-02
      1.588e-02 5.917e-03 1.769e-01 6.503e-02 1.563e-01 9.567e-01 1.094e+00
      8.205e+00 8.968e-03 1.646e-02 1.588e-02 5.917e-03 2.574e-02 2.582e-03
      8.964e+00 2.196e+01 5.726e+01 2.422e+02 1.297e-01 1.357e-01 6.880e-02
      2.564e-02 3.105e-01 7.409e-02]
     [1.000e+00 1.317e+01 1.866e+01 8.598e+01 5.346e+02 1.158e-01 1.231e-01
      1.226e-01 7.340e-02 2.128e-01 6.777e-02 2.871e-01 8.937e-01 1.897e+00
      2.425e+01 6.532e-03 2.336e-02 2.905e-02 1.215e-02 1.743e-02 3.643e-03
      1.567e+01 2.795e+01 1.028e+02 7.594e+02 1.786e-01 4.166e-01 5.006e-01
      2.088e-01 3.900e-01 1.179e-01]
     [1.000e+00 1.205e+01 1.463e+01 7.804e+01 4.493e+02 1.031e-01 9.092e-02
      6.592e-02 2.749e-02 1.675e-01 6.043e-02 2.636e-01 7.294e-01 1.848e+00
      1.987e+01 5.488e-03 1.427e-02 2.322e-02 5.660e-03 1.428e-02 2.422e-03
      1.376e+01 2.070e+01 8.988e+01 5.826e+02 1.494e-01 2.156e-01 3.050e-01
      6.548e-02 2.747e-01 8.301e-02]
     [1.000e+00 1.349e+01 2.230e+01 8.691e+01 5.610e+02 8.752e-02 7.698e-02
      4.751e-02 3.384e-02 1.809e-01 5.718e-02 2.338e-01 1.353e+00 1.735e+00
      2.020e+01 4.455e-03 1.382e-02 2.095e-02 1.184e-02 1.641e-02 1.956e-03
      1.515e+01 3.182e+01 9.900e+01 6.988e+02 1.162e-01 1.711e-01 2.282e-01
      1.282e-01 2.871e-01 6.917e-02]
     [1.000e+00 1.176e+01 2.160e+01 7.472e+01 4.279e+02 8.637e-02 4.966e-02
      1.657e-02 1.115e-02 1.495e-01 5.888e-02 4.062e-01 1.210e+00 2.635e+00
      2.847e+01 5.857e-03 9.758e-03 1.168e-02 7.445e-03 2.406e-02 1.769e-03
      1.298e+01 2.572e+01 8.298e+01 5.165e+02 1.085e-01 8.615e-02 5.523e-02
      3.715e-02 2.433e-01 6.563e-02]
     [1.000e+00 1.364e+01 1.634e+01 8.721e+01 5.718e+02 7.685e-02 6.059e-02
      1.857e-02 1.723e-02 1.353e-01 5.953e-02 1.872e-01 9.234e-01 1.449e+00
      1.455e+01 4.477e-03 1.177e-02 1.079e-02 7.956e-03 1.325e-02 2.551e-03
      1.467e+01 2.319e+01 9.608e+01 6.567e+02 1.089e-01 1.582e-01 1.050e-01
      8.586e-02 2.346e-01 8.025e-02]
     [1.000e+00 1.194e+01 1.824e+01 7.571e+01 4.376e+02 8.261e-02 4.751e-02
      1.972e-02 1.349e-02 1.868e-01 6.110e-02 2.273e-01 6.329e-01 1.520e+00
      1.747e+01 7.210e-03 8.380e-03 1.311e-02 8.000e-03 1.996e-02 2.635e-03
      1.310e+01 2.133e+01 8.367e+01 5.272e+02 1.144e-01 8.906e-02 9.203e-02
      6.296e-02 2.785e-01 7.408e-02]
     [1.000e+00 1.822e+01 1.870e+01 1.203e+02 1.033e+03 1.148e-01 1.485e-01
      1.772e-01 1.060e-01 2.092e-01 6.310e-02 8.337e-01 1.593e+00 4.877e+00
      9.881e+01 3.899e-03 2.961e-02 2.817e-02 9.222e-03 2.674e-02 5.126e-03
      2.060e+01 2.413e+01 1.351e+02 1.321e+03 1.280e-01 2.297e-01 2.623e-01
      1.325e-01 3.021e-01 7.987e-02]
     [1.000e+00 1.510e+01 2.202e+01 9.726e+01 7.128e+02 9.056e-02 7.081e-02
      5.253e-02 3.334e-02 1.616e-01 5.684e-02 3.105e-01 8.339e-01 2.097e+00
      2.991e+01 4.675e-03 1.030e-02 1.603e-02 9.222e-03 1.095e-02 1.629e-03
      1.810e+01 3.169e+01 1.177e+02 1.030e+03 1.389e-01 2.057e-01 2.712e-01
      1.530e-01 2.675e-01 7.873e-02]]

values =  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

y = [[0]
     [0]
     [0]
     [0]
     [0]
     [1]
     [1]
     [1]
     [1]
     [1]] 

Any ideas on how this can be fixed? I have read other answers that get the same exception, but they are generated from other libraries (like cv2).

6
  • 2
    Your function is designed to take and return matrices. Matrices aren't ordered; there is no such thing as a "minimum" return value of this function. What are you even trying to compute? Commented Feb 1, 2018 at 18:40
  • I'm trying to minimize residual sum of squares in linear regression. I guess the lambda w: X has no meaning then. But what about the original? It returns a scalar right? I edited the response Commented Feb 1, 2018 at 18:44
  • Does fun(w) work? What shape does it return? Commented Feb 1, 2018 at 18:48
  • 1
    Your fun still just return a matrix, are you thinking of numpy.sum instead of sum? Commented Feb 1, 2018 at 18:56
  • fun(w) returns a (1x1) matrix. Commented Feb 1, 2018 at 19:01

1 Answer 1

1

Use sum in python on numpy matrix will only sum along axis and return another matrix. You should use numpy.sum to sum all the elements in matrix to a scalar.

fun = lambda w: numpy.sum(numpy.power( y-numpy.matmul( numpy.transpose(w) , X), 2))
Sign up to request clarification or add additional context in comments.

2 Comments

Yup. Just have to use numpy.sum instead of sum and it worked like a charm. Thanks!
But be careful, I'm not sure if what is being summed here is the actual equation you want to use. You might want to double check that part.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.