ValueError: matmul: входной операнд 1 имеет несоответствие в основном измерении 0 при попытке умножить матрицу на вектор - PullRequest
1 голос
/ 12 апреля 2020

У меня есть матрица дизайна X с r строками и c столбцами, и я хочу добавить новую строку, в которой все ее записи равны 1 (строка перехвата) для обучающей модели.

def fit_linear_regression(X, y):
  ones = np.ones(X.shape[1])
  K = np.insert(X.T, 0, ones, axis=1)
  K = K.T
  singulars = np.linalg.svd(K, compute_uv=False)
  w = np.linalg.pinv(K.transpose()) @ y
  return singulars, w

Проблема в том, что когда я добавляю нужную строку за пределы функции fit_linear_regression, то есть когда я предварительно обрабатываю данные и затем отправляю матрицу в качестве аргумента после добавления строки 1, все работает отлично, но когда я пытаюсь добавить В строке из функции я, кажется, столкнулся со следующей проблемой:

ValueError: matmul: входной операнд 1 имеет несоответствие в своем основном измерении 0, с> gufun c signature (n ?, k), (k, m?) -> (n?, m?) (размер 18 отличается от 17)

Я не могу точно определить, где проблема .. . y - это вектор ответа из 162 строк, а XT - это транспонирование 162x18 (ранее 17), поэтому, когда я пытаюсь их умножить, все должно работать нормально.

Обновлено: это формы X и у сразу после входа в функцию:

X.shape[0] = 17, X.shape[1] = 162

y.shape[1] = 162

Добавление строки перехвата должно изменить X.shape [0] на 18, и это так, но тогда возникает эта ошибка. Я мог бы добавить фактические данные X и y, но я нахожу их запутанными и бесполезными ...

...