numpy 4x3矩阵LinAlgError:给出一维数组。数组必须至少是二维的

时间:2018-08-16 22:41:54

标签: arrays python-3.x numpy linear-algebra

我有一个使用numpy linalg.solve解决的4 x 3系统,但是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)

哪里出错了?

3 个答案:

答案 0 :(得分:0)

查看您的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

答案 1 :(得分:0)

正如@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

答案 2 :(得分: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]