【问题标题】:Finding entry of vector in PARI/GP?在 PARI/GP 中找到向量的条目?
【发布时间】:2015-03-01 11:28:03
【问题描述】:

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

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

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

喜欢:

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

%1 = 8

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

【问题讨论】:

    标签: pari-gp pari


    【解决方案1】:

    只需执行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 提供了 87 毫秒和 198 毫秒

    【讨论】:

      【解决方案2】:

      你可以试试:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-24
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 2020-07-06
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        相关资源
        最近更新 更多