ValueError: не удалось передать входной массив из shape (4,1) в shape (4) при попытке добавить два многомерных массива в python - PullRequest
0 голосов
/ 02 марта 2020

Я новичок в 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 раза вместо обычного поэлементного добавления. Пожалуйста, помогите мне исправить код.

1 Ответ

0 голосов
/ 02 марта 2020

Вы можете определить форму массива 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]]

Я надеюсь, что это решит вашу проблему.

Также добавьте еще один вопрос в следующий раз, так как это другой вопрос, чем ваш оригинальный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...