【发布时间】:2017-07-13 14:25:56
【问题描述】:
好的,所以我在 Python 中包装了一个 C 库并调用了相应的 DLL 然后我创建了一个 for 循环,打印出所有 60,000 个数据点,然后导致 Python 崩溃。
这是我的问题:
如何在 numpy 中创建一个 for 循环,这样它会更快并且不会导致 python 崩溃?
这是我包装的 C 库和我正在调用的 dll 的一个小示例:
import ctypes
from ctypes import *
class SParm(Structure):
pass
SParm._fields_ = [
('name', ctypes.c_char_p),
('time', ctypes.POINTER(ctypes.c_float)),
dll.readSParm.argtypes = (POINTER(SFile), c_char_p, c_double, c_double, c_double, POINTER(TTag), c_ushort,)
dll.readSParm.restype = POINTER(SParm)
g = dll.readSParm(SF, ParmName, startTime, stopTime, Null, None, convertType)
这是我创建的 Python for 循环。
time = (g[0].time)
for i in (time):
print(i)
^ 这会打印出值,然后在完成之前使 python 崩溃
我正在尝试这样的事情:
time = (g[0].time)
for i in (time):
np.savetxt(sys.stdout, i)
但是上面的代码向我抛出了这个错误:
ncol = X.shape[1]
IndexError: tuple index out of range
【问题讨论】:
-
for循环不应该使 python 崩溃,即使有很多数据点。我宁愿猜测您有某种内存访问问题,但是如果没有看到您的 C 代码就很难知道。您是否尝试过使用少量数据点(可能是 10 个)?当 python 在你原来的for循环中崩溃时,你得到的实际错误是什么? -
我没有数据,所以我不能只尝试 10 个数据点。
time = (g[0].time)是指向数据存储位置的指针。我试图让 python 为我打印出所有的值,但这最终导致它崩溃。当 Python 崩溃时,我没有收到错误代码。弹出一个框并显示“Python 已停止工作,这是一个问题引起的,请关闭程序”@ThomasKuhn -
@ThomasKühn 有没有办法在给我最后一个数据点后结束循环?
-
好吧,如果你知道确切的长度,那么是的。
-
@ThomasKühn 是的,我知道确切的长度。我将如何结束循环?
标签: python arrays numpy for-loop