ValueError: формы (1,1) и (4,1) не выровнены: 1 (dim 1)! = 4 (dim 0) - PullRequest
1 голос
/ 03 октября 2019

Итак, я пытаюсь реализовать (a * b) * (M * aT), но продолжаю получать ValueError. Поскольку я новичок в python и numpy функциях, помощь будет отличной. Заранее спасибо.

import numpy.matlib
import numpy as np



def complicated_matrix_function(M, a, b):

    ans1 = np.dot(a, b)
    ans2 = np.dot(M, a.T)
    out = np.dot(ans1, ans2)

    return out

M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
a = np.array([[1, 1, 0]])
b = np.array([[-1], [2], [5]])

ans = complicated_matrix_function(M, a, b)

print(ans)
print()
print("The size is: ", ans.shape)

Сообщение об ошибке:

ValueError: формы (1,1) и (4,1) не выровнены: 1 (тусклый 1)! = 4 (тусклый0)

1 Ответ

0 голосов
/ 03 октября 2019

Сообщение об ошибке говорит вам, что numpy.dot не знает, что делать с матрицей (1x1) и матрицей (4x1). Однако, поскольку в вашей формуле вы говорите только, что хотите умножить, я предполагаю, что вы просто хотите умножить скаляр от скалярного произведения (a, b), на которое нужно умножить вектор, выходящий из произведения матрицы на вектор (Ma). Для этого вы можете просто использовать * в python.

Итак, ваш пример будет:

import numpy.matlib
    import numpy as np

    def complicated_matrix_function(M, a, b):

        ans1 = np.dot(a, b)
        ans2 = np.dot(M, a.T)
        out = ans1 * ans2

        return out

    M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    a = np.array([[1, 1, 0]])
    b = np.array([[-1], [2], [5]])

    ans = complicated_matrix_function(M, a, b)

    print(ans)
    print()
    print("The size is: ", ans.shape)

, что приведет к

[[ 3]
 [ 9]
 [15]
 [21]]

The size is:  (4, 1)

Примечание

Обратите внимание, что numpy.dot много сделает interpretation, чтобы выяснить, что вы хотите сделать. Поэтому, если вам не требуется, чтобы ваш результат был размером (4,1), вы можете упростить все до:

import numpy.matlib
import numpy as np



def complicated_matrix_function(M, a, b):

    ans1 = np.dot(a, b)
    ans2 = np.dot(M, a) # no transpose required
    out = ans1 * ans2

    return out

M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
a = np.array([1, 1, 0]) # no extra [] required
b = np.array([-1, 2, 5]) # no extra [] required

ans = complicated_matrix_function(M, a, b)

print(ans)
print()
print("The size is: ", ans.shape)

, что приведет к

[ 3  9 15 21]

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