【问题标题】:how does numpy's polyvander3d work?numpy polyval 3d 是如何工作的?
【发布时间】:2017-05-19 00:10:09
【问题描述】:

这是参考 https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.polynomial.polynomial.polyvander3d.html

我不知道如何解码这个函数的返回值

所以我想要的基本上是一个 2 度的 xyz 多项式:

我似乎无法弄清楚如何解码这个例子:

(x,y,z) = (3,3,3) 度数为 [2,2,2]

>>>polyvander3d(3, 3, 3, [2, 2, 2] )
    array([[  1.,    3.,    9.,    3.,    9.,   27.,    9.,   27.,   81.,
              3.,    9.,   27.,    9.,   27.,   81.,   27.,   81.,  243.,
              9.,   27.,   81.,   27.,   81.,  243.,   81.,  243.,  729.]])

此外,文档说:

V 的前导索引对点 (x, y, z) 进行索引,最后一个索引对 x、y 和 z 的幂进行编码。

我不知道他们的意思。

谁能帮忙?

【问题讨论】:

  • 我认为最好将令人困惑的文档描述为页面下方的“返回矩阵的形状是x.shape + (order,),其中...”
  • 我认为您最大的困惑是范德蒙德矩阵对于一个标量输入来说有些无用。通常x,y,z 至少是一维数组

标签: python numpy matrix polynomial-math


【解决方案1】:

polyvander3d(x, y, z, [x_deg, y_deg, z_deg]) 返回一个矩阵,其中每列的形状为((x_deg+1)*(y_deg+1)*(z_deg+1), ),并包含所有 3D 多项式系数,顺序为c000, c001, c002, ..., c010, c011...

因此,使用您的示例,返回矩阵的第一列包含 (V[0]) 包含所有 3d 多项式系数:

>>>V = polyvander3d(3, 3, 3, [2, 2, 2])
>>>V
array([[  1.,    3.,    9.,    3.,    9.,   27.,    9.,   27.,   81.,
          3.,    9.,   27.,    9.,   27.,   81.,   27.,   81.,  243.,
          9.,   27.,   81.,   27.,   81.,  243.,   81.,  243.,  729.]])

如:

V[0][0] = (3^0 + 3^0 + 3^0) = 1
V[0][1] = (3^0 + 3^0 + 3^1) = 3
V[0][2] = (3^0 + 3^0 + 3^2) = 9
V[0][3] = (3^0 + 3^1 + 3^0) = 3
V[0][4] = (3^0 + 3^1 + 3^1) = 9

以此类推,直到

V[0][(x_deg+1)*(y_deg+1)*(z_deg+1) - 1] = V[0][26] = (3^2 + 3^2 + 3^2) = 729

Here's the most current link to the documentation(问题中的那个导致 numpy v1.10)。

【讨论】:

    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多