2

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

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

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

喜欢:

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

%1 = 8

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

4

2 回答 2

3

只需执行select((x) -> x == 8, a, 1)where flag1表示“索引模式”即可。一般来说,你的功能如下图所示。

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

于 2015-04-10T18:50:57.777 回答
0

你可以试试:

position = select(x->x==8,a,1)[1];
于 2018-08-20T21:21:55.940 回答