我听说过从Python代码调用C函数的不同方法,比如ctypes,cython,swig,Boost.python等.当然,每个方法都有优缺点.我的问题是关于效率.我需要从Python调用C数值函数.这种C函数的典型示例是:
double f(double x){
return sin(x)+cos(x)-pow(2,x) + x*x;
}
Run Code Online (Sandbox Code Playgroud)
调用需要在一次运行中迭代2000-200000次.
在这样的背景下,C->Python我应该使用哪种变压器?
我看过很多例子,这使我不只是好奇
以下是两个示例:
return;void函数的末尾,这简直是荒谬的。return;在函数中间使用可以打破它。我不喜欢下面的示例可以阐明第二种情况(第一种情况很明显):
- SomeMethodThatReturnsSomethingOrNot(var param1){
if (param1 == null){
CallThisMethod();
return;
}
CallThisOtherMethod(param1);
}
Run Code Online (Sandbox Code Playgroud)
对很多人来说,这很好而且很清楚。对我来说,这充其量是可以接受的。
为什么不简单地使用an if else?您可以避免在return代码中间不需要任何内容,它不会降低可读性,而且,我不知道还有什么要说的,对我来说,这似乎是一种更好的做法。
- SomeMethodThatReturnsSomethingOrNot(var param1){
if (param1 == null){
CallThisMethod();
}else{
CallThisOtherMethod(param1);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想在这里强调示例的简单性,我知道可以制作出一些性感的东西,但是我们假装比null检查要复杂一些,需要使用相同的if-return替代of if-else技术。
那么,每个人的想法是什么?
当该方法无效或我实际上不想返回任何东西时,我一直强烈反对返回任何东西。如果最终遇到这种情况,我想重新考虑一下我的体系结构,因为它不应该发生。
我是完全错误/正确的还是这里有讨论空间?
到目前为止我所听到的一切都是人们说Java通常比C慢,但有一些例外(比如涉及代码什么都不做).所以我出去测试它.我在0到999,999之间有一个100,000个整数的数组.我在C和java(在OS X上编译)中使用了一个双循环来将它们从最小到最大排序.
结果是Java通常在一半时间内完成.在使用不同阵列的5次运行中,Java占用大约17秒,而C占用大约32秒(包括从文件中分配和填充阵列的时间,两者都可以忽略不计).
那么什么会使Java代码比C运行得更快?是否有我遗漏的东西,或者我听不到的一些基础技术?
编辑:也不确定它是否重要,但我使用time命令计时,而不是任何自定义代码.例如:$time java SortArray
至于编译器选项,我现在无法访问该命令行,但它是OS X 10.10上的默认gcc选项:
gcc sortarray.c -o sortarray
我只是使用默认的javac来编译Java.
javac SortArray.java
C:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 32
int main()
{
FILE* file = fopen("bigarray.txt", "r");
int arraySize = 100000;
int array[100000] = {};
int i, j, temp;
char inputBuffer[SIZE];
for (i = 0; i < arraySize; i++) {
fgets(inputBuffer, SIZE, file);
array[i] = strtod(inputBuffer, NULL);
}
for (i = 0; i < arraySize; i++)
for (j = i + 1; j …Run Code Online (Sandbox Code Playgroud) 我很难在C中声明我的变量.编译器在令牌之前显示消息"预期的构造函数析构函数或类型转换."我做错了什么?
#include <stdio.h>
int count =0;
int abc;
ABC;
a = 19, b = 27, c = 3;
a = 4 + 5 * 3;
b = (4 +5) * 3;
c = 25 -(2 * (10 + (8 / 2)));
main {
printf("Enter a value please\n");
scanf("%d, , \n");
return 0;
}
Run Code Online (Sandbox Code Playgroud) c ×3
performance ×2
arrays ×1
coding-style ×1
ctypes ×1
if-statement ×1
java ×1
python ×1
return ×1
sorting ×1
swig ×1