我读过并理解浮点舍入问题,例如:
>>> 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
我们有一个电影和连续剧数据库,由于数据来自不同可靠性的来源,我们希望能够对剧集的标题进行模糊字符串匹配.我们在我们的应用程序中使用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"匹配.
(我不确定查询是否正确.)
而且,我希望能够做更多事情.我想降低字符串,删除所有标点符号和空格,删除英语停用词,然后将字符串更改为三字符串.但是,只有在字符串被标记化后才应用过滤器...
提前感谢您的回答.
我知道这个问题已被问了很多时间.我想要一个关于哪种算法适合近似字符串匹配的建议.
该应用程序专门用于公司名称匹配,而不是其他任何内容.
最大的挑战可能是公司的最终名称部分和简短的命名部分示例:1.companyA pty ltd vs companyA pty.LTD.vs companyA 2. WES工程与WES工程(极为罕见)
你认为Levenshtein编辑距离是否足够?
我正在使用C#
此致,Max
看似相似的问题:" 在数组中查找最接近的数字 "(在Java中)和" 找到与双打数组最接近的数字 "(实际上是地理问题).
我有一个(排序的)双打数组.给定一个任意数字(可能是或者可能不是其中一个数组元素的完全匹配),如何返回最接近匹配的数字的索引?
例如,使用以下数组:
查询2.5将返回索引为1,对应于2.4的值.
用于检测完全在数组元素范围之外的值的加分点.例如,使用上面列出的数组,您的代码可能会决定4.6是否在,但5.9已经完成.如果您想尝试这部分问题,具体内容掌握在您手中.
我正在使用 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) 这是以下文档assert_in_delta:
Run Code Online (Sandbox Code Playgroud)assert_in_delta(exp, act, delta = 0.001, msg = nil) public用于比较Floats.除非exp和act在彼此的delta之内,否则失败.
Run Code Online (Sandbox Code Playgroud)assert_in_delta Math::PI, (22.0 / 7.0), 0.01
Run Code Online (Sandbox Code Playgroud)assert_in_epsilon(a, b, epsilon = 0.001, msg = nil) public用于比较Floats.除非exp和act的相对误差小于epsilon,否则失败.
这些看起来很相似; 究竟有什么区别?你什么时候使用一种方法而不是另一种?
我正在尝试检查A列中有多少字符串与B列中的字符串大致匹配.
例:
如果我在B列中有字符串"angry_birds_iph_app",并且"angry_birds_iph_app"和"angry_birds_adrd_app"出现在A列的某处,我希望该函数返回2.
问题:考虑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)近似值.我想找到类似的问题文献以及他们用来解决问题的想法.
我试图制作一个自适应的"约等于"方法(用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编写一个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)