我正在为 python 编写一个 c 扩展。正如您在下面看到的,代码的目的是计算两个向量的欧几里德距离。第一个参数 n 是向量的维度,第二个,第三个参数是两个浮点列表。
我在 python 中调用函数是这样的:
import cutil
cutil.c_euclidean_dist(2,[1.0,1,0],[0,0])
Run Code Online (Sandbox Code Playgroud)
它运行良好,返回正确的结果。但是如果我这样做超过100次(尺寸为1 * 1000),则会导致分段错误-核心转储:
#!/usr/bin/env python
#coding:utf-8
import cutil
import science
import time
a = []
b = []
d = 0.0
for x in range(2500):
a.append([float(i+x) for i in range(1000)])
b.append([float(i-x) for i in range(1000)])
t1 = time.time()
for x in range(500):
d += cutil.c_euclidean_dist(1000,a[x],b[x])
print time.time() - t1
print d
Run Code Online (Sandbox Code Playgroud)
C代码在这里:
#include <python2.7/Python.h>
#include <math.h>
static PyObject* cutil_euclidean_dist(PyObject* self, PyObject* args) {
PyObject *seq_a, *seq_b;
int …Run Code Online (Sandbox Code Playgroud)