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

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

我有一个 4 x 3 系统要使用 numpy linalg.solve 来解决,但 numpy 一直抛出 LinAlgError: 1-dimensional array given. Array must be at least two-dimensional

可用的教程和问题都是针对方阵的,我不确定如何进行。

这是我的代码和矩阵:

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)

哪里出错了?

看看你的A。不要只是假设你写对了。

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

正如@hpaulj 指出的那样,您的矩阵 'A' 不是 4x3。如果你像这样用 numpy 初始化一个新的全零 4x3 数组:

z = np.zeros((4, 3)

您将看到:

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

注意括号的位置。现在与您的数组 'A'.

进行比较

您的数组中还有一个严重的拼写错误。 4, 19 应该是 4/19.

这里是固定的:

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})

这导致:

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

正如 hpaulj 所说,您的 A 是错误的。但是,即使您将以正确的语法编写它,您也只能在矩阵 A 是方阵(表示形状 (n,n))且具有满秩的情况下使用 np.linalg.solve。因为你的矩阵 A 的形状是 (4,3) np.linalg.solve 会引发一个 LinAlgError,所以你需要使用 np.linalg.lstsq 代替:

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]