Массив, возвращающий неправильные значения?

#arrays #numpy

#массивы #numpy

Вопрос:

Код:

 testdata  = np.array([[20.5, 765], [32.7, 826], [51.0, 873], [73.2,942], [95.7,1032]])

def LinearLeastSquares(data):
    x=np.array(data[:,:1])
    y=np.array(data[:,1:2])
    n=len(data)

    A=np.sum(np.array([[x**2 , x ], [x , n]]))
    B=np.sum(np.array([x*y , y]))
    print(A,B) #To check outputs
    return
  

Результат, который я ищу, — это массив 2×2 и массив 2×1, где каждая позиция представлена суммированием по каждому значению массива testdata (в зависимости от того, что требуется) и выводом чисел. Моя основная проблема заключается в том, что я ожидаю, что будут возвращены массивы 2×2 и 2×1, но вместо этого я получаю следующее для A и B соответственно при запуске LinearLeastSquares(testdata) :

 [[ 466.25]
 [1139.69]
 [2708.  ]
 [5509.64]
 [9354.89]] 259370.5
  

Помимо вывода, не имеющего правильных размеров, вычисления также неверны, хотя есть некоторые числа, которые относительно близки, но не все из них.
Любая помощь приветствуется.

Ответ №1:

Проблема в том, что вы объединяете массивы и скаляры np.array и применяете сумму для заданной оси. Если я правильно понимаю ваши амбиции, я рекомендую вам выполнить операции суммирования для каждого массива, а затем объединить результаты в массив numpy:

 A = np.array([np.sum(arr) for arr in [x**2, x, x, n]]).reshape((2,2))
B = np.array([np.sum(arr) for arr in [x*y , y]]).reshape((2,1))
  

Изменения формы необходимы для преобразования A и B в массивы 2×2 и 2×1.