使用numpy linalg python解决Ax = b引发LinAlgError('不兼容的维度')

时间:2018-06-18 14:25:28

标签: python numpy linear-algebra least-squares

我正在尝试为x解决Ax = b。

A是稀疏矩阵; x是未知的,b是np.array。

print(type(matrix_a))
print(type(vector_c))

print("Matrix A Shape  -- %s " %str(matrix_a.shape))
print("vector c shape -- %s " %len(vector_c))

#xx = np.array([1],dtype=np.float32)

vec_c = np.insert(vector_c,0,1)
print("Update Vector c shape -- %s "% len(vec_c))

new_matrix = matrix_a.todense()
new_matrix_T = new_matrix.transpose()

x = np.linalg.lstsq(new_matrix_T,vec_c)

产生以下输出。

  

      矩阵形状 - (48002,7651)
  矢量c形状 - 48001
  更新矢量C形状 - 48002

回溯(最近一次调用最后一次):文件

  

“/ Users / 已删除 /PycharmProjects/hw2/main.py”,第139行,       main()文件“/Users/removed/PycharmProjects/hw2/main.py”,第65行,主要       b1 = st.fit_parameters(A1,c)文件“/Users/removed/PycharmProjects/hw2/hw3_part1.py”,第191行,   fit_parameters       x = np.linalg.lstsq(new_matrix_T,vec_c)文件“/Users/removed/.conda/envs/hw2/lib/python3.6/site-packages/numpy/linalg/linalg.py “,1984年,在lstsq       提升LinAlgError('不兼容的维度')numpy.linalg.linalg.LinAlgError:不兼容的维度

1 个答案:

答案 0 :(得分:1)

您将形状为matrix_a的矩阵M, N = 48002, 7651转换为N, M = 7651, 48002形状。但问题是你的矢量是形状M = 48002,np.linalg.lstsq需要尺寸(a.shape=(M, N), b.shape=(M,)。由于您的转置,您传递的维度为(a.shape=(N, M), b.shape=(M,))

解决方案?不要转置matrix_a