0

I have this function which gets 3 inputs and does some matrix calculations.

import numpy as np def func(input_x, output_y, lambda_param): if input_x.shape[0]<input_x.shape[1]: input_x = np.transpose(input_x) input_x = np.c_[np.ones(input_x.shape[0]),input_x] lambda_param = np.identity(input_x.shape[1])*lambda_param a = np.linalg.inv(lambda_param+np.matmul(np.transpose(input_x),input_x)) b = np.matmul(np.transpose(input_x),output_y) weights = np.matmul(a,b) weights = np.array([weights]) return weights 

The function works well but I have a problem with the data type of the result. For example I have the inputs yy, xx and lamb:

 yy = np.array([208500, 181500, 223500, 140000, 250000, 143000, 307000, 200000, 129900, 118000]) xx = np.array([[1710, 1262, 1786, 1717, 2198, 1362, 1694, 2090, 1774, 1077], [2003, 1976, 2001, 1915, 2000, 1993, 2004, 1973, 1931, 1939]]) lamb = 10 result = func(xx, yy, lamb) print(result) #--> np.array([-576.67947107, 77.45913349, 31.50189177]) #print(result[2]) #--> 31.50189177 

print(result) gives me [[-576.67947107 77.45913349 31.50189177]] but should return a numpy.array like np.array([-576.67947107, 77.45913349, 31.50189177])

and print(result[2]) should return 31.50189177 but gives an error because its not a np.array?

I hope you can help me! Thanks in advance.

4
  • Have you tried weights = np.array(weights) instead of weights = np.array([weights])? Commented Sep 30, 2020 at 22:35
  • I tried this but this would return [-576.67947107 77.45913349 31.50189177] 31.501891773638363 but not np.array([...]) Commented Sep 30, 2020 at 22:37
  • try checking the datatype of result using type(result). For me it is showing numpy.ndarray. Commented Sep 30, 2020 at 22:40
  • print(arr) shows the str format of the array, which omits the work array and commas. The repr gives more details. Commented Sep 30, 2020 at 23:29

2 Answers 2

2

You don't need this line: weights = np.array([weights]) weights is already a 1D numpy array after weights = np.matmul(a,b). The redundant line will give an extra dimension to weights and the shape of weights becomes (1,3). You can check these by using print(weights.shape)

Sign up to request clarification or add additional context in comments.

Comments

1

Removing the second to last line of func (weights = np.array([weights])) should fix it for you. You're unintentionally creating a two-dimensional array with that line. For example:

x = np.array([0.25, 0.50, 0.75]) print(x.shape) #--> (3,) print(x[2]) #--> 0.75 y = np.array([x]) print(y.shape) #--> (1, 3) print(y[2]) #--> IndexError 

y above is a 2D array with length 1 in the first index and length 3 in the second index, so y[2] (which applies to the first index) doesn't exist.

You could do np.array(weights) instead (without putting weights in a list), but that's obsolete as weights is already a numpy array.

In terms of what's printed - you can check that weights really is a numpy array by doing print(type(weights)). It is a numpy array even if this isn't clear from print(weights).

1 Comment

thank you, very simple but i didnt see it, now it works

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.