标签: approximate

如何对浮点数和复数进行近似结构模式匹配

我读过并理解浮点舍入问题,例如:

>>> sum([0.1] * 10) == 1.0
False

>>> 1.1 + 2.2 == 3.3
False

>>> sin(radians(45)) == sqrt(2) / 2
False
Run Code Online (Sandbox Code Playgroud)

我还知道如何使用math.isclose()cmath.isclose()解决这些问题。

问题是如何将这些解决方法应用到 Python 的 match/case 语句中。我希望这个工作:

match 1.1 + 2.2:
    case 3.3:
        print('hit!')  # currently, this doesn't match
Run Code Online (Sandbox Code Playgroud)

python floating-point complex-numbers approximate structural-pattern-matching

55
推荐指数
2
解决办法
3495
查看次数

如何使用n-gram与Solr近似匹配?

我们有一个电影和连续剧数据库,由于数据来自不同可靠性的来源,我们希望能够对剧集的标题进行模糊字符串匹配.我们在我们的应用程序中使用Solr进行搜索,但是默认的匹配机制在单词级别上运行,这对于短字符串来说不够好,比如标题

我过去曾使用过n-gram近似匹配,我很高兴地发现Lucene(和Solr)支持开箱即用的东西.不幸的是,我无法正确配置它.

我假设我需要一个特殊的字段类型,所以我在schema.xml中添加了以下字段类型:

<fieldType 
   name="trigrams" 
   stored="true" 
   class="solr.StrField"> 
 <analyzer type="index"> 
   <tokenizer 
       class="solr.analysis.NGramTokenizerFactory" 
       minGramSize="3" 
       maxGramSize="5" 
       /> 
   <filter class="solr.LowerCaseFilterFactory"/> 
 </analyzer> 
</fieldType> 
Run Code Online (Sandbox Code Playgroud)

并将架构中的相应字段更改为:

<field name="title" type="trigrams" 
    indexed="true" stored="true" multiValued="false" /> 
Run Code Online (Sandbox Code Playgroud)

但是,这并不像我预期的那样有效.查询分析看起来正确,但我没有得到任何结果,这使我相信在索引时发生了某些事情(即标题被索引为默认字符串字段而不是trigram字段).

我正在尝试的查询是类似的

title:"guy walks into a psychiatrist office"
Run Code Online (Sandbox Code Playgroud)

(有一两个错字)它应该与"Guy Walks into a Psychiatrist Office"匹配.

(我不确定查询是否正确.)

而且,我希望能够做更多事情.我想降低字符串,删除所有标点符号和空格,删除英语停用词,然后将字符串更改为三字符串.但是,只有在字符串被标记化后才应用过滤器...

提前感谢您的回答.

lucene search solr approximate

9
推荐指数
2
解决办法
2万
查看次数

近似字符串匹配

我知道这个问题已被问了很多时间.我想要一个关于哪种算法适合近似字符串匹配的建议.

该应用程序专门用于公司名称匹配,而不是其他任何内容.

最大的挑战可能是公司的最终名称部分和简短的命名部分示例:1.companyA pty ltd vs companyA pty.LTD.vs companyA 2. WES工程与WES工程(极为罕见)

你认为Levenshtein编辑距离是否足够?

我正在使用C#

此致,Max

c# string matching approximate

9
推荐指数
1
解决办法
1万
查看次数

如何找到最接近任意(非成员)数字的数组元素?

看似相似的问题:" 在数组中查找最接近的数字 "(在Java中)和" 找到与双打数组最接近的数字 "(实际上是地理问题).

我有一个(排序的)双打数组.给定一个任意数字(可能是或者可能不是其中一个数组元素的完全匹配),如何返回最接近匹配的数字的索引?

例如,使用以下数组:

  • 1.8
  • 2.4
  • 2.7
  • 3.1
  • 4.5

查询2.5将返回索引为1,对应于2.4的值.

用于检测完全在数组元素范围之外的值的加分点.例如,使用上面列出的数组,您的代码可能会决定4.6是否在,但5.9已经完成.如果您想尝试这部分问题,具体内容掌握在您手中.

c# search approximate

6
推荐指数
2
解决办法
7424
查看次数

OpenCV - 在偏移处绘制轮廓

我正在使用 OpenCV 进行图像处理。我正在寻找一个人体,我想将其隔离(分段)。

目前,我能够找到身体的轮廓,并用多边形近似轮廓。接下来,我想在 cvWatershed 中使用该轮廓,以真正隔离身体。

有谁知道如何以向中心偏移的方式绘制轮廓?为了说明这一点,请参见下图。

在此输入图像描述

蓝色:轮廓的多边形近似

红色:我想要的多边形,但无法找到。(上图中,我用的是photoshop...)

这是我查找和绘制当前轮廓的方法:

CvContourScanner scanner = cvStartFindContours(mask, pStorage, sizeof(CvContour),    CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
CvSeq* c;
CvSeq* polyContour;
int numCont = 0;
int perimScale = 4;
int contour_approx_level = 6;
while((c = cvFindNextContour(scanner)) != NULL)
{
    CvSeq* c_new;

    // Polygonal approximation
    c_new = cvApproxPoly(c, sizeof(CvContour), pStorage, CV_POLY_APPROX_DP, contour_approx_level, 0);

    // Create the new contour
    cvSubstituteContour(scanner, c_new);
    numCont++;
}

polyContour = cvEndFindContours(&scanner);
int i = 0;
for(i=0, c=polyContour; c!=NULL; c = c->h_next, i++)
{
    cvDrawContours(pOutput, c, cvScalar(255,125,0), …
Run Code Online (Sandbox Code Playgroud)

drawing opencv contour approximate

6
推荐指数
1
解决办法
5720
查看次数

MiniTest的assert_in_delta和assert_in_epsilon方法有什么区别?

这是以下文档assert_in_delta:

assert_in_delta(exp, act, delta = 0.001, msg = nil) public
Run Code Online (Sandbox Code Playgroud)

用于比较Floats.除非exp和act在彼此的delta之内,否则失败.

assert_in_delta Math::PI, (22.0 / 7.0), 0.01
Run Code Online (Sandbox Code Playgroud)

这是文档assert_in_epsilon

assert_in_epsilon(a, b, epsilon = 0.001, msg = nil) public
Run Code Online (Sandbox Code Playgroud)

用于比较Floats.除非exp和act的相对误差小于epsilon,否则失败.

这些看起来很相似; 究竟有什么区别?你什么时候使用一种方法而不是另一种?

ruby minitest approximate

6
推荐指数
1
解决办法
719
查看次数

Excel近似文本匹配

我正在尝试检查A列中有多少字符串与B列中的字符串大致匹配.

例:

如果我在B列中有字符串"angry_birds_iph_app",并且"angry_birds_iph_app"和"angry_birds_adrd_app"出现在A列的某处,我希望该函数返回2.

string excel match vlookup approximate

5
推荐指数
1
解决办法
1万
查看次数

在多台机器上利润下降的高效调度工作

问题:考虑M台机器上n个作业的调度问题,其中每个作业具有处理时间p i,并且如果在时间t完成则给出利润g i(t).所有作业都在时间0释放.所有g i(t)都是非递增函数.为简单起见,我们可以假设机器不是先发制人的.

对于M = 1并且线性递减利润函数.使用贪婪算法可以在O(n)中解决这个问题.但对于一般功能,它是NP完全的.

我对一般情况感兴趣.请给我任何关于问题的论文或资源材料的链接.我在互联网上搜索但没有找到任何有趣的M> 1,尽管之前有关于近似M = 1边界的工作.

请注意,我不希望你解决这个问题,但只需要解决类似问题的先前工作,如果有的话.如果您有任何想法可以提供帮助,请随时分享.

我想知道m机器和n个具有相同发布日期和一般非增加利润函数的作业对此问题的界限.我找到了一份指向这个方向的文章

http://arxiv.org/pdf/1008.4889v1.pdf

当所有作业具有相同的释放时间时,它们给出O(1)近似值.我想找到类似的问题文献以及他们用来解决问题的想法.

algorithm np-complete maximize approximate job-scheduling

5
推荐指数
1
解决办法
283
查看次数

比较双精度与自适应近似相等

我试图制作一个自适应的"约等于"方法(用C#编写,但问题是一般的)接受两个双精度并返回一个布尔值,如果它们是"大致相等"或不是.通过自适应,我的意思是:

1.234和1.235 ==> TRUE

1.234567和1.234599 ==> FALSE

也就是说,"约等于"的准确性适应数字的精确性.

我找到了一个四舍五入的概念如何找到两个变量大致相等?但是仍然有一个开放性的问题,即如何使用epsilon.

是否有人知道这类问题的最佳做法?提前致谢!

编辑:我的初步问题没有包含足够的信息,我想要得到什么.抱歉,我的道歉.我想要一个程序,它可以将更高的准备数量处理到更高的标准,同时对更低的准确数量更宽松.对的更多例子是(其中'(0)'是隐含的零):

1.077和1.07(0)返回false(因为77与70非常不同)

1.000077和1.00007(0)返回false(因为77与70非常不同)

1.071和1.07(0)返回true(因为71接近70

1.000071和1.00007(0)返回true(因为71接近70)

无论实现代码如何,我都假设会有某种"容差"变量来确定什么是"非常不同"和什么是"接近".

c# equals approximate

4
推荐指数
1
解决办法
2335
查看次数

C中的Pi近似 - 为什么我得到0的近似值的结果?

我正在尝试用C编写一个Quasi- Monte Carlo逼近pi.我还不太熟悉它并试图翻译我的基于python的技能,所以我可能只是忽略了一些东西.结果我一直得0,我无法弄明白为什么.我该怎么解决这个问题?另外,我在最后两次printf调用时收到错误,说他们是类型double *而不是double.无论如何它编译,这是相关的吗?

#include <stdio.h>
/*  
Tristen Wentling
montepithon.c
October 31, 2013

*/  
int main(void)
{   
    float i,j,x;
    float count=0,counter=0;
    printf("Please enter the desired grid division size (n=?)");
    scanf("%f", &x);
    float y=x*x;
    if(x==0){
        printf("goodbye");
    }   
    else if(x!=0){
        for(i=0;i<=x;i++){
            for(j=0;j<=x;j++){
                float check=((i*i)*(1/y))+((j*j)*(1/y));
                /*printf("%f\n", check);*/
                if(check<=1){
                    count+=1;
                }   
                else{
                    counter+=1;
                }   
            }   
        }   
    }   
    else{
        printf("error");
    }   
    float prsum=count/y;
    float ptsum=(1-counter)*(1/y);
    double pirprox=4*prsum;
    double pitprox=4*ptsum;
    printf("%f\n", &pirprox);
    printf("%f\n", &pitprox);
    getchar();
}   
Run Code Online (Sandbox Code Playgroud)

c montecarlo approximate

3
推荐指数
1
解决办法
161
查看次数