ValueError: формы (11,1) и (11,1) не выровнены: 1 (dim 1)! = 11 (dim 0) - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь реализовать подгонку Гаусса, у меня проблема, когда я пытаюсь умножить матрицы, как показано ниже.почему я получил эту ошибку?Я печатаю результат только для проверки умножения 2-х матриц, на matlab, когда я делаю это, я получаю матрицу с тем же размером, и значения верны.

Любая помощь, пожалуйста?

спасибо

код

    import numpy as np
    import pandas as pd

    spectre = pd.read_csv('spectre.txt')
    wl = pd.read_csv('longueur_d_onde.txt')
    spectre = spectre -8000
    A = wl.iloc[185:196,0]
    B = spectre.iloc[185:196, 0 ]
    #*******
    sigma = 2565/8192
    mu = A[192]
    A_ = np.transpose(np.matrix(A))
    Mu_ = np.transpose(np.zeros((1,len(A))))
    for i in range(len(A)):
        Mu_[i] = mu

    mu_ = A_-Mu_
    mu_t = np.transpose(mu_)
    for i in range (100):
        #Y = dat/dat[30]
        Y = np.matrix((B/B[192]))
        Yt = np.transpose(Y)
        N = np.exp(-np.power(mu_,2)//(2*sigma**2))
        print(N*np.power(mu_,2)) # when i print this i got the error.

ошибка

ValueError: shapes (11,1) and (11,1) not aligned: 1 (dim 1) != 11 (dim 0)

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Без ваших файлов я не могу воссоздать ваши расчеты, но могу внести некоторые предложения.

A = wl.iloc[185:196,0]
B = spectre.iloc[185:196, 0 ]

A и B теперь серии Панд.

sigma = 2565/8192
mu = A[192]
A_ = np.transpose(np.matrix(A))

np.matrix(A) создает (1,11) форму matrix; transpose меняет это на (11,1). A_ = A.to_numpy() создаст (11,) ndarray. A_=np.reshape(A_, (11,1) сделает это 2d без перегрузки np.matrix.

Mu_ = np.transpose(np.zeros((1,len(A))))
for i in range(len(A)):
    Mu_[i] = mu

Mu_ - это (11,1) matrix с mu во всех слотах.

mu_ = A_-Mu_

mu_ = A_-mu работал бы так же хорошо. Не нужно делать Mu_. mu_ будет иметь тот же тип и форму, что и A_.

mu_t = np.transpose(mu_)

Не нужно делать mu_t (форма (1,11)).

Я не понимаю, для чего этот цикл.

for i in range (100):
    #Y = dat/dat[30]
    Y = np.matrix((B/B[192]))
    Yt = np.transpose(Y)

Опять же, Y = (B/B[192]).to_numpy() должно быть достаточно. Но Y не используется ниже.

    N = np.exp(-np.power(mu_,2)//(2*sigma**2))

N имеет тот же тип и форму, что и mu_A_)

    print(N*np.power(mu_,2)) # when i print this i got the error.

Какова цель этого умножения? Предполагается, что результат будет (11,1) -элементным продуктом или (1,1) dot продуктом? В любом случае вам не нужно 2d matrix.

Я думаю, ваш код можно упростить до:

A_ = A.to_numpy()    # (11,) shape array
mu_ = A_ - mu
N = np.exp(-np.power(mu_,2)//(2*sigma**2))    # still (11,) shape
N*np.power(mu_,2)          # element-wise multiplication (11,) shape
N@np.power(mu_,2)          # dot product, scalar result
0 голосов
/ 19 июня 2019

Вы, вероятно, не используете ожидаемый тип умножения матриц.N * np.power(mu_,2)) дает вам произведение Адамара (или поэлементное умножение матриц).

Если вы ищете истинное матрично-матричное умножение, вы хотите использовать N.dot(*np.power(mu_,2)) или N @ np.power(mu_,2)

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