ValueError:尝试在python中添加两个多维数组时,无法将输入数组从形状(4,1)广播到形状(4)
我是python新手。我有两个多维(4x1)数组,我需要添加这些数组来得到最终的4x1数组,但我得到的是一个4x4数组。 请帮忙ValueError:尝试在python中添加两个多维数组时,无法将输入数组从形状(4,1)广播到形状(4),python,arrays,numpy,Python,Arrays,Numpy,我是python新手。我有两个多维(4x1)数组,我需要添加这些数组来得到最终的4x1数组,但我得到的是一个4x4数组。 请帮忙 A=np.array([[(-.01-10)/1e-5,-1/1e-5,10/1e-5,0] ,[1/1e-8,-1/(.05*1e-8),0,0],[10/1e-8,0,(-10-1)/1e- 8,-1/1e-8],[0,0,1/1e-3,0]]); B=np.array([[1/1e-5,0],[0,1/(.05*1e-8)],[0,0],[0,0]]); vd
A=np.array([[(-.01-10)/1e-5,-1/1e-5,10/1e-5,0] ,[1/1e-8,-1/(.05*1e-8),0,0],[10/1e-8,0,(-10-1)/1e-
8,-1/1e-8],[0,0,1/1e-3,0]]);
B=np.array([[1/1e-5,0],[0,1/(.05*1e-8)],[0,0],[0,0]]);
vdon=.7;
vin= 12;
U= np.array([[vin],[vdon]]);
X[:,0]=np.array([0,0,0,0])
Result=np.add(A.dot(X[:,0]),B.dot(U))
数组被复制4次,而不是通常的按元素添加。
请帮助我更正代码。您可以通过初始化来定义要创建的X数组的形状
X=np.zeros((4, 1))
现在这个数组的形状是通过加法定义的,因此它将填充在一个维度中。
新代码:-
import numpy as np
A=np.array([[(-.01-10)/1e-5,-1/1e-5,10/1e-5,0] ,[1/1e-8,-1/(.05*1e-8),0,0],[10/1e-8,0,(-10-1)/1e-8,-1/1e-8],[0,0,1/1e-3,0]])
B=np.array([[1/1e-5,0],[0,1/(.05*1e-8)],[0,0],[0,0]])
vdon=.7
vin= 12
U= np.array([[vin],[vdon]])
X=np.zeros((4, 1))
Result=np.add(A.dot(X),B.dot(U))
print(Result)
此代码的输出为:-
[[1.2e+06]
[1.4e+09]
[0.0e+00]
[0.0e+00]]
首先创建一个空数组
a = np.zeros((10, 4))
然后在其中填充值
for i in range(0,10):
X = np.add(A.dot(X), B.dot(U))
a[i, :] = X.ravel()
print(a)
这项研究的结果如下:
[[ 1.20000000e+06 1.40000000e+09 0.00000000e+00 0.00000000e+00]
[-1.41201199e+14 -2.79988000e+18 1.20000000e+15 0.00000000e+00]
[ 2.81329342e+23 5.59974588e+27 -1.46120120e+24 1.20000000e+18]
[-5.61717400e+32 -1.11994636e+37 1.88865054e+33 -1.46120120e+27]
[ 1.12239729e+42 2.23988711e+46 -2.63923285e+42 1.88865054e+36]
[-2.24364986e+51 -4.47976299e+55 4.02555324e+51 -2.63923285e+45]
[ 4.48603444e+60 8.95950354e+64 -6.67175816e+60 4.02555324e+54]
[-8.97066582e+69 -1.79189622e+74 1.18249680e+70 -6.67175816e+63]
[ 1.79397668e+79 3.58378347e+83 -2.19781300e+79 1.18249680e+73]
[-3.58777706e+88 -7.16754901e+92 4.21157086e+88 -2.19781300e+82]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
我希望这能解决你的问题
下次再添加一个问题,因为它与原来的问题不同我需要将整个程序放入for循环,然后在每一步提取X列。我该如何使用您的程序?@hinataexc每次迭代中的输入是什么?
对于范围(0,10):X[I+1]=A.dot(X[:,I])+B.dot(u)
。u在上面定义,在每次迭代中,X应取上一次迭代的值