Могу ли я не делить матрицу на число с плавающей точкой в ​​Python? - PullRequest
0 голосов
/ 16 сентября 2018

Когда я пытаюсь выполнить матричные операции над уравнением в Python, я получаю следующую ошибку:

TypeError: в скалярный индекс могут быть преобразованы только целочисленные скалярные массивы

То, как я перевожу это, заключается в том, что Python говорит мне, что я не могу создать матрицу 1x1 с помощью матричных операций со значениями с плавающей запятой, но для меня это не имеет смысла.

Мой код здесь:

x0 = np.array([[-1.1], [1.1]])
dfx = lambda x: np.array([-400*x[0]*x[1]+400*np.power(x[0],3)+2*x[0]-2, 200*(x[1]-np.square(x[0]))], dtype='float32')

temp = np.zeros((2,1))
gamma = np.zeros((2,1))
delta = np.zeros((2,1))
hess = np.eye(2, dtype='float32') 

deltaX = np.dot(-hess,dfx(x0))
p = t*deltaX 
temp = x0+t*deltaX
q = dfx(temp)-dfx(x0)

htemp = hess + np.dot(1 + np.divide(np.dot(np.dot(np.transpose(q,hess),q)), np.dot(np.transpose(p),q)), np.divide(np.dot(p,np.transpose(p)),np.dot(np.transpose(p),q)))

При тестировании кода мне выдается ошибка при выполнении операции деления:

print(np.divide(np.dot(np.dot(np.transpose(q,hess),q)), np.dot(np.transpose(p),q)))

Если кому-то интересно узнать, что это за уравнение, то это часть этого парня:

1 Ответ

0 голосов
/ 16 сентября 2018

Проблема, кажется, np.transpose(q,hess) вместо np.dot(np.transpose(q),hess), поскольку первое не имеет смысла.

Я также предлагаю разбить члены htemp на разные переменные (например, T1 = hess, T2 = 1 + q ^ TH q / p ^ Tq и т. Д.) И затем суммировать их, чтобы код был более отслеживаемым .

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