在PARI / GP中查找矢量的输入?

时间:2015-01-03 10:34:41

标签: pari-gp pari

使用PARI / GP时,如果我有一个包含唯一条目的向量:

a = [9, 7, 3, 5, 2, 8, 1, 0, 11]

如何获取向量a中的条目的位置(索引)?

像:

i = vectorsearch(a, 8);
a[i]

%1 = 8

转换为集合并使用setsearch不起作用!

2 个答案:

答案 0 :(得分:3)

只需执行select((x) -> x == 8, a, 1),其中标志1表示“索引模式”。通常,您的功能如下所示。

position = (elt, array) -> select((x) -> x == elt, array, 1);

请注意,尽管这个东西对数组的每个元素都进行了lambda调用,但这非常有效。这导致小/大阵列的良好运行时间。

为了证明效率,我们进行简单的性能测试,以评估position及其DIY竞争对手只关注首次出现的位置。

position1 = (elt, array) -> for(i = 1, #array, if(array[i] == el, return(i)));

a = vector(100, i, random(200));
{ gettime(); for(i = 1, 10^4, position(8, a)); gettime() }
{ gettime(); for(i = 1, 10^4, position1(8, a)); gettime() }

对于运行在Windows 8 64位,Intel i7-4702MQ CPU @ 2.20GHz

的PARI / GP 2.7.2,相应地提供87ms和198ms

答案 1 :(得分:0)

您可以尝试:

position = select(x->x==8,a,1)[1];