Изменение значений выходной матрицы на Numpy! Для этого есть команда c? - PullRequest
0 голосов
/ 04 марта 2020

Я получаю правильный ответ, когда вычисляю коэффициенты Вандермонда в этой матрице. Однако выходная матрица меняется на противоположную. Это должно быть [6,-39,55,27] вместо [27,55,-39,6].

Мой вывод для моей матрицы Вандермонда перевернут и окончательное решение c перевернуто.

import numpy as np
from numpy import linalg as LA


x = np.array([[4],[2],[0],[-1]])
f = np.array([[7],[29],[27],[-73]])

def main():

    A_matrix = VandermondeMatrix(x)
    print(A_matrix)
    c = LA.solve(A_matrix,f) #coefficients of Vandermonde Polynomial
    print(c)

def VandermondeMatrix(x):
    n = len(x)
    A = np.zeros((n, n))
    exponent = np.array(range(0,n))
    for j in range(n):
        A[j, :] = x[j]**exponent
    return A





if __name__ == "__main__":
    main()

Ответы [ 4 ]

0 голосов
/ 04 марта 2020

Просто сделайте экспоненту range в обратном направлении с самого начала, тогда вам не придется переворачивать потом, сокращая время выполнения:

def VandermondeMatrix(x):
    n = len(x)
    A = np.zeros((n, n))
    exponent = np.array(range(n-1,-1,-1))
    for j in range(n):
        A[j, :] = x[j]**exponent
    return A

Out:

#A_matrix:
[[64. 16.  4.  1.]
 [ 8.  4.  2.  1.]
 [ 0.  0.  0.  1.]
 [-1.  1. -1.  1.]]

#c:
[[  6.]
 [-39.]
 [ 55.]
 [ 27.]]
0 голосов
/ 04 марта 2020

Вы можете сделать print(c[::-1]), который обратит порядок c. От Как мне перевернуть порядок массива 1d numpy?

0 голосов
/ 04 марта 2020
In [3]: def VandermondeMatrix(x): 
   ...:     n = len(x) 
   ...:     A = np.zeros((n, n)) 
   ...:     exponent = np.array(range(0,n)) 
   ...:     for j in range(n): 
   ...:         A[j, :] = x[j]**exponent 
   ...:     return A 
   ...:                                                                                        
In [4]: x = np.array([[4],[2],[0],[-1]])                                                       
In [5]: VandermondeMatrix(x)                                                                   
Out[5]: 
array([[ 1.,  4., 16., 64.],
       [ 1.,  2.,  4.,  8.],
       [ 1.,  0.,  0.,  0.],
       [ 1., -1.,  1., -1.]])
In [6]: f = np.array([[7],[29],[27],[-73]])                                                    
In [7]: np.linalg.solve(_5,f)                                                                  
Out[7]: 
array([[ 27.],
       [ 55.],
       [-39.],
       [  6.]])

Результатом является (4,1) массив; обратные строки с:

In [9]: _7[::-1]                                                                               
Out[9]: 
array([[  6.],
       [-39.],
       [ 55.],
       [ 27.]])

Отрицательные шаги, [::-1] индексация также используется для обращения Python списков и строк.

In [10]: ['a','b','c'][::-1]                                                                   
Out[10]: ['c', 'b', 'a']
0 голосов
/ 04 марта 2020
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...