algorithm - 如何循环遍历 Octave 中的矩阵以生成 n 阶交叉项多项式

标签 algorithm octave linear-algebra polynomial-math

我想要做的是以下内容,我有一个 n x m 大小的矩阵,有 n 行数据和 m 列。这些列中的每一列都是一个不同的变量(想想 X、Y、Z 等...)。

我想要的是输出一个 n x (m+f(m, i)) 矩阵,其中 i 是请求的多项式的阶数,而 f(m, i) 是多项式的项数,包括多项式的交叉项。

我举个例子,假设我有一个一行三列的矩阵,我想返回最高为 3 阶的多项式项。

input = [x, y, z]

我想去

output = [x, y, z, x^2, y^2, z^2, x*y, x*z, y*z, x^3, y^3, z^3, x^2y, x^2*z, x*y^2, y^2*z, x*z^2, y*z^2, x*y*z]

由此我们看到 f(3, 3) = 16

我知道我可以使用 m 嵌套循环来做到这一点,而且我相信我可以根据行数对任何算法进行矢量化,但是拥有比蛮力更有效的算法会很有帮助。

最佳答案

这可以使用以下代码以数字方式完成,也应该很容易以符号方式完成。

function MatrixWithPolynomialTerms = GeneratePolynomialTerms

(InputDataMatrix, n)
  resultMatrix = InputDataMatrix;

  [nr, nc] = size(InputDataMatrix);

  cart  = nthargout ([1:nc], @ndgrid, [0:n]);
  combs = cell2mat (cellfun (@(c) c(:), cart, "UniformOutput", false))';

  for i = 1:length(combs)
    if (sum(combs(:, i)) <= n)
      resultColumn = ones(nr, 1);
      for j = 1:nc
        resultColumn.*=(InputDataMatrix(:, j).^combs(j, i));
      end
      resultMatrix = [resultMatrix, resultColumn];
    end
  end
  MatrixWithPolynomialTerms = resultMatrix
endfunction

关于algorithm - 如何循环遍历 Octave 中的矩阵以生成 n 阶交叉项多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52317650/

相关文章:

python - 如何生成正确形式的 Toeplitz 矩阵以执行离散卷积?

c - 使用 DP 的链式矩阵乘法的解释?

algorithm - 总是插入哈希表序列

algorithm - 查找图中一对一节点的所有链

arrays - 输出3D数组的算法

octave - GNU Octave 音程 : How to find n maximum elements of a vector

MATLAB:如何求解线性系统模 m

matrix - Octave:一组上的矩阵乘法

file - 在 Octave 中将矩阵写入文本文件的最快方法是什么?

python - Numpy:乘以一个向量