小编The*_*ird的帖子

使用gdb和gfortran进行调试 - FPE

我正在调试我添加的更大的数字程序.它是用fortran90编写的,用gfortran编译(最新版本适用于Mac),我正在使用gdb进行调试(同样是Mac的最新版本).

我的添加有一个错误,我试图找到它,这是明确的,因为运行该程序不会产生预期的结果.当我在gdb中运行它时,我在结尾处得到以下输出:

Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG IEEE_DIVIDE_BY_ZERO IEEE_UNDERFLOW_FLAG IEEE_DENORMAL [Inferior 1 (process 83843) exited normally]

我想确定这个FPE的确切位置,但似乎浮点异常不会导致程序崩溃.我通过在我的代码中明确地除以0来测试它 - 它不会导致程序停止运行,但会导致意外行为.

什么是gdb或gfortran的正确标志,以确保程序在到达浮点异常时停止运行(理想情况下是回溯)?我尝试按照这里的说明进行操作,但似乎没有改变任何内容.

fortran gdb gfortran fortran90

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

FuncAnimation超越了frame参数

我正在使用FuncAnimation软件包制作高斯波包的电影,使用有限差分实空间方法来解决薛定谔方程.相关代码如下.基本上,当我运行它时,一切运作良好 - 一个电影弹出显示我想要的东西.但是,更改"frames ="参数实际上不会改变帧数.您可以看到我在我的animate函数中打印当前迭代.此计数器上升到"frames ="中指定的数字,但随后返回0并继续运行.动画运行得比指定的更远.即使我指定"frames = 1",电影也会无限期地继续播放(我试着让它继续运行一个下午).我对于发生的事情感到非常难过,但我相对肯定这是愚蠢的事情.

# Set up the matplotlib figure and axes
fig = plt.figure()
ax = plt.axes(xlim = (0, hamiltonian.L), ylim = (0, 3))
line, = ax.plot([], [], lw = 2)
time_text = ax.text(.02, .95, '', transform=ax.transAxes)
ax.grid()

def init():
    """initialize the animation"""
    line.set_data([], [])
    time_text.set_text('')

    return line, time_text

def animate(i):
    """actually perform the animation"""
    print i
    global hamiltonian, wavepacket
    hamiltonian.propagate(wavepacket)
    line.set_data(wavepacket.x, wavepacket.psi_sq)
    time_text.set_text('time = %.3f' % wavepacket.time_elapsed)

    return line, time_text

# Now call the animator …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

Axes3d vs axes3d matplotlib

我刚刚在OSX Lion上安装了一个糟糕的scipy,numpy和matplotlib.出于某种原因,我做不到:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3d
Run Code Online (Sandbox Code Playgroud)

错误输出是:

Traceback (most recent call last):
  File "3dPlot.py", line 2, in <module>
    from mpl_toolkits.mplot3d import Axes3d
ImportError: cannot import name Axes3d
Run Code Online (Sandbox Code Playgroud)

但我能做到:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
Run Code Online (Sandbox Code Playgroud)

Axes3d和axes3d之间是否有不同,或者我的文件是否因为某些原因以小写'a'命名?

python numpy matplotlib scipy

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

转换为指向 Cython 扩展类的指针

我是 Cython 的新手,所以请耐心等待。我正在尝试将一些数据转换为指向扩展类的指针。类本质上是一个美化的结构。它在我的 .pxd 文件中声明为:

cdef class Field:

    cdef:
        np.float64_t u                   # x velocity
        np.float64_t v                   # y velocity
        np.float64_t w                   # z velocity

    cdef update(self)
Run Code Online (Sandbox Code Playgroud)

当然,这是在 .pyx 文件中实现的。在我的驱动程序代码中,我有一个 4 维数组np.float64_t。前三个维度代表 x、y 和 z。第四个维度应该代表这三个值u, v, w。我在纯 Python 驱动程序中分配网格,然后将网格传递到 Cython 文件。在 Cython 文件中,我投射:

curr_grid_element = (<Field *> &grid[xx, yy, zz, 0])
curr_grid_element.update()
Run Code Online (Sandbox Code Playgroud)

但当我这样做时,我收到错误:Pointer base type cannot be a Python object

这让我很困惑,因为我认为Field是纯 C 语言。

python cython

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

标签 统计

python ×3

matplotlib ×2

cython ×1

fortran ×1

fortran90 ×1

gdb ×1

gfortran ×1

numpy ×1

scipy ×1