如何用numpy制作一个简单的范德蒙矩阵?

rvpgvaaj  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(158)

我的问题是如何制作范德蒙矩阵。定义如下:在线性代数中,范德蒙矩阵(英语:Vandermonde matrix)是以 Alexandria -泰奥菲尔·范德蒙(英语:Alexandre-Théophile Vandermonde)命名的矩阵,是一个每行都有几何级数项的矩阵,即m × n矩阵。
我想做一个4*4的版本。
到目前为止,我已经定义了值,但只针对一行,如下所示

a=2
n=4

for a in range(n):
    
    for i in range(n):
        v.append(a**i)
v = np.array(v)
print(v)

我不知道如何缩放这个。请帮助!

yvgpqqbh

yvgpqqbh1#

给定长度为m的起始列a,您可以创建一个范德蒙矩阵v,其中包含na**0a**(n-1),如下所示:

import numpy as np

m = 4
n = 4

a = range(1, m+1)
v = np.array([a]*n).T**range(n)
print(v)
#[[ 1  1  1  1]
# [ 1  2  4  8]
# [ 1  3  9 27]
# [ 1  4 16 64]]
n7taea2i

n7taea2i2#

正如michael szczesny所建议的,你可以使用numpy.vander。但是这将符合Wikipedia上的定义。

x = np.array([1, 2, 3, 5])
N = 4
np.vander(x, N)

#array([[  1,   1,   1,   1],
#       [  8,   4,   2,   1],
#       [ 27,   9,   3,   1],
#       [125,  25,   5,   1]])

因此,您还必须使用numpy.fliplr

x = np.array([1, 2, 3, 5])
N = 4
np.fliplr(np.vander(x, N))

#array([[  1,   1,   1,   1],
#       [  1,   2,   4,   8],
#       [  1,   3,   9,  27],
#       [  1,   5,  25, 125]])

这也可以在没有numpy的情况下使用嵌套列表解析来实现:

x = [1, 2, 3, 5]
N = 4
[[xi**i for i in range(N)] for xi in x]

#   [[1, 1, 1, 1],
#    [1, 2, 4, 8],
#    [1, 3, 9, 27],
#    [1, 5, 25, 125]]
xj3cbfub

xj3cbfub3#

# Vandermonde Matrix
def Vandermonde_Matrix(D, k):
    '''
    D = {(x_i,y_i): 0<=i<=n}
    ----------------
    k degree
    '''
    n = len(D)
    V = np.zeros(shape=(n, k))
    for i in range(n):
        V[i] = np.power(np.array(D[i][0]), np.arange(k))
    return V

相关问题