Natasha Ting
Natasha Ting

Reputation: 49

Numpy 4x3 matrix LinAlgError: 1-dimensional array given. Array must be at least two-dimensional

I have a 4 x 3 system to solve using numpy linalg.solve , but numpy keeps throwing LinAlgError: 1-dimensional array given. Array must be at least two-dimensional.

Tutorials and questions available are all for square matrices, and I'm not sure how to proceed.

This is my code and matrix:

import numpy as np

A = np.array([[[[1/15, 1/15, 2/19],
            1/15, 2/15, 4,19],
            2/15, 2/15, 4/19],
            2/15, 2/15, 4/19])

B = np.array([0.1144807411, 0.1262803853, 0.1234210927, 0.130977131])

C = np.linalg.solve(A, B)

print(C)

Where did it go wrong?

Upvotes: 2

Views: 18436

Answers (3)

joni
joni

Reputation: 7157

Like hpaulj already said, your A is wrong. But even if you will write it in the correct syntax, you can use np.linalg.solve only for the case your matrix A is a square matrix (means shape (n,n)) and has full rank. Because your matrix A has shape (4,3) np.linalg.solve will raise an LinAlgError, so you need to use np.linalg.lstsq instead:

import numpy as np

A = np.array([[1/15, 1/15, 2/19], [1/15, 2/15, 4/19], [2/15, 2/15, 4/19], [2/15, 2/15, 4/19]])
B = np.array([0.1144807411, 0.1262803853, 0.1234210927, 0.130977131])
C = np.linalg.lstsq(A, B, rcond=None)[0]

Upvotes: 2

MarkS
MarkS

Reputation: 1539

As @hpaulj points out, your matrix 'A' is not 4x3. If you initialize a new all zero 4x3 array with numpy like this:

z = np.zeros((4, 3)

You will see:

[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

Note the placement of the brackets. Now compare to your array 'A'.

You also have a critical typo in your array. 4, 19 should be 4/19.

Here it is fixed:

import sys
import numpy as np


print(np.__version__)
print(sys.version)

A = np.array([[1/15, 1/15, 2/19],
              [1/15, 2/15, 4/19],
              [2/15, 2/15, 4/19],
              [2/15, 2/15, 4/19]])

print(f'Matrix dimensions: ', {A.shape})
print(f'Matrix size: ', {A.size})

Which results in:

1.15.0
3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
Matrix dimensions:  {(4, 3)}
Matrix size:  {12}

Process finished with exit code 0

Upvotes: 0

hpaulj
hpaulj

Reputation: 231385

Look at your A. Don't just assume you wrote it right.

In [387]: A = np.array([[[[1/15, 1/15, 2/19],
     ...:             1/15, 2/15, 4,19],
     ...:             2/15, 2/15, 4/19],
     ...:             2/15, 2/15, 4/19])
     ...: 
     ...:             
In [388]: A
Out[388]: 
array([list([[[0.06666666666666667, 0.06666666666666667, 0.10526315789473684], 0.06666666666666667, 0.13333333333333333, 4, 19], 0.13333333333333333, 0.13333333333333333, 0.21052631578947367]),
       0.13333333333333333, 0.13333333333333333, 0.21052631578947367],
      dtype=object)
In [389]: A.shape
Out[389]: (4,)
In [390]: A.dtype
Out[390]: dtype('O')

In [391]: A[0]
Out[391]: 
[[[0.06666666666666667, 0.06666666666666667, 0.10526315789473684],
  0.06666666666666667,
  0.13333333333333333,
  4,
  19],
 0.13333333333333333,
 0.13333333333333333,
 0.21052631578947367]
In [392]: A[1]
Out[392]: 0.13333333333333333

Upvotes: 1

Related Questions