我有一个使用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)
哪里出错了?
答案 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]