#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.