循环遍历 PARI/GP 中的特定值

问题描述

我有大量的向量集合,每个向量的形式都是 [a,b,c,d]

对于每个向量,我想返回结果 [a,d,a+b^2+c^3+d^4]。这样做的最佳方法是什么?

例如,假设我的向量是 V = [ [1,2,3,4],[5,6,7,8],[9,10,11,12] ]。最好的方法是定义一个函数,例如:

test( W ) = for( i=1,#W,print( [ [W[i][1],W[i][2],W[i][3],W[i][4],W[i][1]+W[i][2]^2+W[i][3]^3+W[i][4]^4] ] ) ) ?

(记住,在实践中我也会有更大的向量集合)

这感觉像是一种天真的方法,那么有没有更好的方法呢?特别是,这是最快的方法吗?有没有更好的方法来存储我的矢量集合?

解决方法

使用矩阵来存储向量的向量。然后只需附加包含指数总和的新列。看例子:

V = [[1,2,3,4],[5,6,7,8],[9,10,11,12]];  /* your vector of vectors */

M = matconcat([V[1]; V[2]; V[3]]);
M_log = log(M);

matconcat([M,M[,1] + exp(2*M_log[,2]) + exp(3*M_log[,3]) + exp(4*M_log[,4])])
> [1  2  3  4 288.00]
> [5  6  7  8 4480.00]
> [9 10 11 12 22176.00]