ValueError:尝试在python中添加两个多维数组时,无法将输入数组从形状(4,1)广播到形状(4)

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

我是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]]);
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应取上一次迭代的值