小编ilu*_*tar的帖子

将fortran双精度格式读入python

我试图读取一个Fortran双精度数字,如1.2345D + 02到python,但我得到以下错误:

>>> float('1.2345D+02')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 1.2345D+02
Run Code Online (Sandbox Code Playgroud)

通过使用D而不是E遵循Python科学记数法的建议,我尝试了numpy但我也得到了同样的错误:

import numpy
>>> numpy.float("1.2345D+02")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 1.2345D+02
Run Code Online (Sandbox Code Playgroud)

Python中是否有解决方案来读取那些双精度数而不仅仅将'D'更改为'E'?

编辑:我替换了字符串上的错误语法.但我仍然得到错误.

python double fortran input

7
推荐指数
1
解决办法
3846
查看次数

如何在scipy.stats.gamma.fit中获取拟合参数的误差估计?

我有一些我适合使用scipy.stats的gamma分布.我能够提取形状,位置和比例参数,它们看起来与我期望的数据范围合理.

我的问题是:有没有办法在参数中得到错误?类似于curve_fit的输出.注意:我不直接使用曲线拟合,因为它不能正常工作,并且大多数时间都无法计算伽马分布的参数.另一方面,scipy.stats.gamma.fit工作正常.

这是我正在做的一个例子(没有我的实际数据).

from scipy.stats import gamma
shape = 12; loc = 0.71; scale = 0.0166
data = gamma.rvs(shape, loc=loc, scale=scale, size=1000)
params = gamma.fit(data) # params close to but not the same as (shape, loc, scale) 
# HOW TO ESTIMATE/GET ERRORS FOR EACH PARAM?
Run Code Online (Sandbox Code Playgroud)

提前致谢

python numpy curve-fitting scipy data-fitting

7
推荐指数
1
解决办法
2398
查看次数

输出精度高于双精度

我正在打印一些来自C++程序的数​​据,以便由ParaView处理/可视化,但我遇到浮点数问题.Paraview支持Float32和Float64数据类型.Float64相当于两倍,典型限制为+/- 1.7e +/- 308.但是,我的代码是打印数字,如6.5e-318.这是在读取数据时抛出ParaView中的错误.我已经验证将这些小数字舍入为零会使ParaView中的错误消失.我不知道为什么我有这样的"高精度"输出,可能是因为有些数字的存储精度高于双精度.例如,以下代码在我的系统上重现相同的行为:

#include <iostream>
int main(void)
{
  const double var1 = 1.0e-318, var2 = 1.5e-318;
  std::cout << 1.0e-318 << std::endl; 
  std::cout << var1 << std::endl; 
  std::cout << var1 - var2 << std::endl; 
  std::cout.setf(std::ios_base::fixed | std::ios_base::scientific, std::ios_base::floatfield);
  std::cout << 1.0e-318 << std::endl; 
  std::cout << var1 << std::endl; 
  std::cout << var1 - var2 << std::endl; 

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的输出是:

9.99999e-319
9.99999e-319
-4.99999e-319
9.99999e-319
9.99999e-319
-4.99999e-319
Run Code Online (Sandbox Code Playgroud)

我的系统是Mac OS X Snow Leopard,我用GCC 4.2和GCC 4.6测试了上面的标志-m32,-m64并且-ffloat-store(不确定这是否有用).

实际上我的输出很好,但对于ParaView则没有.我只是想知道为什么我有这个区别.我很可能忽略了与浮点数相关的东西,这可能很重要.请问你能给我一些关于双打输出/数值行为的线索吗?

c++ double-precision long-double floating-point-precision paraview

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

OpenMP argmin减少多个值

我有一个例程,它使用一个循环来计算给定下面的粒子表面的粒子的最小高度.此例程尝试随机位置并计算最小高度,然后返回x, y, z值,其中z是找到的最小高度.

该例程可以并行化omp parallel for.但是我在弄清楚如何获得三元组时遇到了问题(x, y, z),而不仅仅是最小值z(因为最小值z当然对应于给定的x, y坐标).z通过使用如下的缩减操作,我实际上可以得到最小的

double x = 0, y = 0, z = 1.0e300; // initially z is large
#pragma omp parallel for reduction(min:z)
for(int trial = 0; trial < NTRIALS; ++trial) {
    // long routine that, at the end, computes x, y, z 
    // and selects only the x, y, z corresponding to the 
    // smallest z
} …
Run Code Online (Sandbox Code Playgroud)

c openmp

2
推荐指数
1
解决办法
251
查看次数