- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个在循环中使用 Gram-Schmidt 的代码。我想尽可能地减少对该算法的调用次数,但问题是,尽管在调用前后得到相同的结果,但当我使用这些值打印某些操作的结果时,它们是不同的。例如,在下面的代码中,abs(muGS[k][0]) - abs(before2)
的结果应该是 0 或非常接近 0,因为这个变量的打印值(之前和通话后)是一样的。然而,事实并非如此。 muGS
是一个 double 矩阵,其值通常在 0 到 1 之间。
int k = 1;
double before2;
while(k < end) {
before2 = muGS[k][0];
gramSchmidt(b, muGS, cGS, k);
//prints for debug
if (abs(muGS[k][0]) - abs(before2) > 0.1) {
if (abs(muGS[k][0]) - abs(before2) > 0.1) {
cout << "1 muGS[k] diff:" << abs(muGS[k][0]) - abs(before2) << endl;
cout << "1 muGS[k] before:" << muGS[k][0] << endl;
cout << "1 muGS[k] after:" << muGS[k][0] << endl;
cout << "1 muGS[k] mult before:" << before2 * before2 << endl;
cout << "1 muGS[k] mult after:" << muGS[k][0] * muGS[k][0] << endl;
cout << "1 muGS[k] abs before:" << abs(before2) << endl;
cout << "1 muGS[k] abs after:" << abs(muGS[k][0]) << endl;
}
getchar();
}
for (i = k-1; i >= 0; i--) {
for (j = 0; j < i; j++) {
muGS[k][j] -= round(muGS[k][i]) * muGS[i][j];
}
}
//some other operations that don't change the value of muGS
k++;
}
输出:
1 muGS[k] diff:0.157396
1 muGS[k] before:0.288172
1 muGS[k] after:0.288172
1 muGS[k] mult before:0.0171023
1 muGS[k] mult after:0.083043
1 muGS[k] abs before:0.130776
1 muGS[k] abs after:0.288172
发生的另一件事是 before2
的绝对值与 before2
的值非常不同。是否有可能我的精度有所下降,或者为什么会发生这种情况?
谢谢
最佳答案
没有精度损失。你只是在你的代码中有一个错误:
cout << "1 muGS[k] before:" << muGS[k][0] << endl;
cout << "1 muGS[k] after:" << muGS[k][0] << endl;
您在之前和之后打印相同的值。但应该是:
cout << "1 muGS[k] before:" << before2 << endl;
cout << "1 muGS[k] after:" << muGS[k][0] << endl;
关于c++ - Gram-Schmidt 可能导致精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25339015/
我正在阅读有关 n 元语法的内容,我想知道在实践中是否存在优先使用单元语法而不是双元语法的情况(或更高的N-grams)。据我了解,N越大,计算概率和建立向量空间的复杂性就越大。但除此之外,还有其他原
我一直在为我的一个新项目使用 ElasticSearch。我已将默认分析器设置为使用 ngram 标记过滤器。这是我的 elasticsearch.yml 文件: index: analysis:
我正在做一个项目,我需要一个 skip-gram 模型的预训练向量。我听说还有一个名为 skip-n-gram 模型的变体可以提供更好的结果。 我想知道自己训练模型需要什么?因为我只需要它们来为我的模
我正在尝试使用 Lucene (5.5.0) 进行一些字符串标记化(无索引)。我需要: 完全删除包含数字的单词,例如像 log4j 这样的单词应该从字符串中删除 我想将字符串拆分为单字术语和 2 克术
我正在尝试在 Scala 中编写基于 n-gram 的分离新闻算法。 如何为大文件生成 n-gram: 例如,对于包含“蜜蜂是蜜蜂的蜜蜂”的文件。 首先它必须选择一个随机的 n-gram。例如,蜜蜂。
给定一个大文本文件,我想使用 Apache Spark 提取字符 n-gram(并行执行任务)。 示例输入(2 行文本): 第 1 行:(Hello World,它) 第 2 行:(是美好的一天) 输
对我以前的post进行了更新,并做了一些更改: 说我有100条微博。 在这些推特中,我需要提取:1)食品名称,2)饮料名称。我还需要附上类型(饮料或食品)和一个id号(每个项目有一个唯一的id)为每个
我是Python新手,正在研究建筑行业契约(Contract)文件的多类文本分类。我在代码中实现 n 元语法时遇到问题,这些代码是我通过从不同的在线资源获得帮助而生成的。我想在我的代码中实现一元语法、
Gram-Schmidt 正交化算法的计算复杂度是多少? 假设一个m 行和k 列的矩阵,计算正交化需要多少次操作? 如果可能的话,我想要乘法和加法的确切数量。 编辑:在我看来,操作总数(乘法 + 加法
在Keras中可以使用n-gram吗? 例如,句子包含在X_train数据框中,带有“句子”列。 我通过以下方式使用Keras的 token 生成器: tokenizer = Tokenizer(lo
给定一个具有独立列的矩阵 A(不一定是正方形),我能够应用 Gram-Schmidt 迭代并使用 Matlab 的函数 qr 为其列空间(以正交矩阵 Q 的形式)生成正交基 A=[1,1;1,0;1,
我有一个 n-gram 列表 ('allo', 'stesso', 'modo', 'dell’italia,', 'che') ('stesso', 'modo', 'dell’italia,',
我有一个已经被标记化的文档列表: dat result[[2]] [1] "argentine" "crude" "oil"
使用什么算法来查找 ngram? 假设我的输入数据是一个单词数组和我想要查找的 ngram 的大小,我应该使用什么算法? 我要求提供代码,优先选择 R。数据存储在数据库中,因此也可以是 plgpsql
我有一个使用关键字 token 生成器(整个术语是 token )的字段类型,具有小写和边缘n-gram过滤器,例如“Robert Longo”存储为“r”,“ro”,...,“robert l”,“
我正在尝试使用三元组进行下一个单词预测。 我已经能够上传一个语料库并通过它们的频率识别最常见的三元组。我在 R 中使用了“ngrams”、“RWeka”和“tm”包。我按照这个问题寻求指导: What
我正在研究一个增强和替代通信 (AAC) 程序。我当前的目标是存储输入/口语文本的历史记录并搜索常用短语片段或单词 n-gram。我目前使用的是基于 lzw 压缩算法的实现,如 CodeProject
我正在构建一个基于 OpenGL3 的免费开源 3D 游戏引擎(这不是学校作业,而是为了个人技能发展和回馈开源社区)。我已经到了需要学习大量相关数学的阶段,所以我正在阅读一本很棒的教科书,名为“3D
我试图从从文本文档中提取的模式中提取 ngram,模式具有不同数量的术语。 例如:如果模式 p={t1,t2,t3} 我们需要提取 ngram 3 应该是这样的 t1 t2 t3 t1, t2 t2,
我正在编写一个 C 程序,以便在某个字符串中找到最频繁的 n-gram。 一个n-gram是一个 contiguous sequence of n items from a given sequenc
我是一名优秀的程序员,十分优秀!