2017-08-14 58 views
0

我正在求解线性方程组系统Ax=b。 据了解,A是正方形和满秩,但它是几个矩阵乘法的结果,说A = numpy.dot(C,numpy.dot(D,E))其中结果可能是1x1取决于输入C,D,E。在这种情况下,Afloat无缝求解可能在numpy中为一维的方形线性系统

b确保是一个向量,即使它是一个1x1之一。

我目前在做

A = numpy.dot(C,numpy.dot(D,E)) 
try: 
    x = numpy.linalg.solve(A,b) 
except: 
    x = b[0]/A 

我搜索numpy的文档,并没有发现solvedot其他替代品,将接受第二个第一或输出端阵列标量。其实numpy.linalg.solve要求维度至少2.如果我们要产生一个A = numpy.array([5])它也会抱怨。

我有遗漏吗?

+0

为什么'A'在1x1的情况下浮动?听起来这是需要纠正的根本问题。 – user2357112

回答

1

其中结果可以是1x1,取决于输入C,D,E。在这种情况下,A是一个浮点数。

这是不正确的,它是一个1x1矩阵,如预期

x=np.array([[1,2]]) 
z=x.dot(x.T) # 1x2 matrix times 2x1 
print(z.shape) # (1, 1) 

其工作只是罚款与linalg.solve

linalg.solve(z, z) # returns [[1]], as expected 
+0

你说得对你的例子。我可能不知道'array'和'dot'是如何工作的。为什么你初始化'x = np.array([[1,2]])而不是'x = np.array([1,2])'? – Hellen

+0

我想我现在明白了你的想法和user2357112的答案。如果我做'numpy.atleast_2d(numpy.array([1,2]))'它产生'[[1,2]]''。像'numpy.array([1,2])'这样的初始化实际上会产生一个'(2,)'数组。 – Hellen

+0

我以这种方式初始化x,因为这是初始化矩阵的唯一正确方法。如果你用[1,2]初始化它,那么它是一个矢量,而不是矩阵。 – lejlot

1

虽然可以扩大A尺寸:

A = numpy.atleast_2d(A) 

听起来像A从来不应该是一个浮动,而你应该修复任何导致它成为一体的东西。