我正在尝试在for循环中使用列向量。它作为一列进入,但作为行出去,这导致循环中的问题因为我得到错误
ValueError:无法将形状
(2,2)
的输入数组广播为形状(2,)
请帮忙。它是怎么回事:
我有一个Xtrue值,输出为
Out[77]:
array([[ 44.3161691],
[-10.5871559]])
然后我进入循环:
xk_1 = Xtrue #initialization before loop
n=103.789 #calculated under some other concept
t=int(float(np.floor(n)))-1 #number of iterations
for k in range(0,t,1):
xk_1[:,k] = A.dot(xk_1[:,k-1]) + B.dot(U) #B.dot(U) is a standard value
B.dot(U)
的输出为(2,1)
array([[-4.903325],
[-9.80665 ]])
A=array([[1, 1],
[0, 1]])
此处A.dot(xk_1[:,k-1])
带有(2,)
形状的内容:
array([ 35.15803805, -9.87264348])
它应该具有(2,1)
这里重要一点是,当(2,k)
时,我需要乘法的第k个值,因为这就是整个系统的工作原理。
答案 0 :(得分:0)
xk_1[:,k-1]
具有(2,)
的形状,因此A.dot(xk_1[:,k-1])
也是(2,)
的原因。然后将(2,)
添加到(2,1)
将导致(2,2)
,从而导致错误。
您始终可以使用以下内容将行向量(k,)
更改为列向量(k,1)
my_array.shape = -1,1 # inplace
或
my_array.reshape((-1,1)) # returns a new array
(-1
表示自动检测尺寸大小,在您的情况下,它相当于2
。)