- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
先介绍一下背景。我正在寻找一个实数对称矩阵的特征值和特征向量,其中行总和为 0。更具体地说,一旦我找到一个特征向量,我就使用 $argsort$ 找到对特征值之一进行排序的排列并将排列应用于原始矩阵。
现在,我使用 numpy 包在 python 中实现了代码。代码本身是递归的,如果它在特征向量中找到一组相等的值,它会提取与我们具有相等值的索引对应的对称子矩阵,并在此矩阵上再次应用该算法。
虽然这一切都很好,而且大部分都是繁重的工作,但当一堆应该对应于特征向量中相等条目的索引没有被识别为具有相等值时,我感到很惊讶。问题是这些值是通过某种算法(可能是 Lanczos,但我对 numpy 并不完全熟悉)计算到机器精度的。这是一个示例输出,我在其中明确检查了特征向量中两个条目之间的差异:
>>> T=spectral.seriation(A,index)
columns [ 0 1 2 3 4 5 6 7 8 9 10 11]
[ 3.30289130e-01 -2.75240941e-01 -2.75240941e-01 3.30289130e-01
-2.75240941e-01 3.30289130e-01 -2.75240941e-01 3.30289130e-01
3.30289130e-01 -2.75240941e-01 -1.69794463e-16 -2.75240941e-01]
[ 4 6 9 1 2 11 10 0 5 7 8 3]
difference -5.55111512313e-17
例程 seriation() 是一个递归函数。 float 组是正在考虑的特征向量,下面的数组给出了列的排序顺序。请注意,列 [4,6,9,1,2,11] 具有相同的值。但是,特征向量和特征值计算始终是近似值,事实上,当我输出第 9 列和第 2 列中的条目之间的差异时,它是非零的。在算法应该分组 [4,6,9,1,2,11] 的地方,它只分组 [4,6,9],并将其余部分放在另一个组中,这给工作带来了麻烦。
那么问题来了:在numpy中有没有实现任意精度计算的方法?如果做不到这一点,这个问题的“好”解决方法是什么?
另外,我应该提一下,可以从数学上证明这些条目必须相等。这是矩阵的一个属性,但希望与问题无关。
最佳答案
double 不完全是实数 [甚至不是有理数]。每个范围内都有无限数量的有理数 [确切地说,每个范围至少有两个元素],但只有有限数量的位来表示它们。
因此,您应该预料到“精确”计算会出现一些舍入误差。
有关更多信息,您可能需要阅读 what every computer scientist should know about floating-point arithmetic
关于python - numpy 中的精度 : issues while comparing numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792430/
关于这个话题已经说了很多,但是我找不到我的问题的确切答案。 JavaScript 无法准确表示 0.1 等小数,这是可以理解的。 例如,由于乘法运算期间发生舍入误差,这是正确的: 0.1 * 3 ==
在 zig 中,可以使用“{d}”以十进制表示法打印浮点值。这将自动以全精度打印该值。有没有办法指定位数?是针对每个值,还是作为某种全局设置? 最佳答案 这将限制小数点后的位数,四舍五入和零填充: f
我正在进行的项目需要高精度。减法时我遇到的问题在这里说明: >> 1-0.9999999999999999 ans = 1.1102e-16 >> 1-0.99999999999999999 ans
是否可以使变量本身的精度成为将在运行时定义的变量? 说,如果我尝试编译: SUBROUTINE FOO( VARIABLE, PRECISION_VALUE ) IMPLICI
我正在查询 SQLite 数据库以获取纬度/经度详细信息。 SELECT * FROM tblMain where latitude > -33.866 and latitude 151.20
我一直使用下划线将整数定义为 Fortran 中的特定类型。 下面是一段代码,用于演示 1_8 的含义,例如: program main implicit none integer(2)
我正在寻找一种方法来告诉 pint 要打印多少个有效数字。例如,当我输入以下内容时: import pint ureg = pint.UnitRegistry() print(3*ureg.m /9)
我正在从事一个项目,目标是从山上追踪动物。在第一个实地考察季中,我们使用了 OpenTags 和经过校准的摄像头,虽然可以正常工作,但需要大量的处理/校准,而且至关重要的是,当系统出现问题时无法提供任
在 JavaScript 中有没有一种方法可以确定一个数除以另一个数是否会得到整数?就像 18.4/0.002 给我们 9200,但是 18.4/0.1 给我们 183.99999999999997。
我正在尝试使用 Big.js 在 javascript 中完成此计算 r = (a * b)/ sqrt( ( a*sin(θ) )^2 + ( b*cos(θ) )^2 ) 我也试过 math.js
我有这个片段着色器代码,它在 iOS 模拟器(非视网膜)和 iPad2(非视网膜)之间显示不同: highp vec2 textCoord; textCoord.x = gl_Fr
这个问题在这里已经有了答案: C++ calculating more precise than double or long double (2 个答案) 关闭 6 年前。 是否有任何浮点类型在小
我似乎一直困惑的三个问题: 为什么代码是 x & ~077比这行代码 x & 0177700 更好。是因为精度损失较小吗? 为什么此代码对于设置数字中的第 5 位不正确? num = num + 0x
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Precision of Floating Point 我正在尝试使用一些 float 来计算概率,但我的最
由于微 Controller 的精度,我定义了一个包含两个 float 比率的符号,而不是直接写结果。 #define INTERVAL (0.01F/0.499F) 代替 #defi
我试图比较这 3 种搜索算法,起初我使用 time.h 库但没有任何反应,输出始终是 0.00000 秒。现在我试图在循环中使用一些计数器。但我在这里也有问题, 任何人都可以帮我处理代码吗? 这是我的
char buf[10]; int counter, x = 0; snprintf (buf, sizeof buf , "%.100d%n", x, &counter); printf("Coun
我注意到在评估向量时对我来说是不可预测的行为。直接执行它与在循环中进行索引似乎是完全不同的。谁能帮我解决这个问题?我知道可能在它如何进行每个操作中都有解释,所以我需要一些关于如何查找它的键 多谢指教提
我想在我的应用程序中使用精确的 gps 定位。所以我遵循了一个简单的教程(LocationManager 的基本用法,明确要求 GPS 提供商,要求更新 0 ms,0 m)并创建了一个应用程序。我对更
float 在 1.0f 和 0.0f 之间有多少位精度,这样每个值都可以唯一表示? 例如,如果第一个小数 float 不能表示 0.13f,答案就是 float 只有一位精度。 最佳答案 std::
我是一名优秀的程序员,十分优秀!