我正在将一些MATLAB代码翻译成C,我正在转换的脚本大量使用具有10*100*300复杂条目的3D数组.数组的大小也取决于传感器的输入,理想情况下应该动态分配数组.到目前为止,我已经尝试了两种方法,第一种方法是平面1D阵列
value = array[x + (y*xSize) + (z*ySize*xSize)]
Run Code Online (Sandbox Code Playgroud)
哪会伤害我的大脑使用.我还尝试了一个指针数组的数组
int main () {
int ***array = malloc(3*sizeof(int**));
int i, j;
for (i = 0; i < 3; i++) {
*array[i] = malloc(3*sizeof(int*));
for (j = 0; j < 3; j++) {
array[i][j] = malloc(3*sizeof(int));
}
}
array[1][2][1] = 10;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试分配数据时,会出现seg错误.
在一个完美的世界中,我想使用第二种方法和数组符号来实现更清晰,更简单的编程.有没有更好的方法在C中动态分配三维数组?
是否有任何算法可以从一组3D数据点返回直线方程?我可以找到很多来源,这些来源将给出2D数据集中的线的等式,但没有3D.
谢谢.
我正在寻找一种方法,使用Python/Cython/Numpy快速将许多4x4矩阵相乘,任何人都可以提出任何建议吗?
为了显示我当前的尝试,我有一个需要计算的算法
A_1 * A_2 * A_3 * ... * A_N
Run Code Online (Sandbox Code Playgroud)
每一个
A_i != A_j
Run Code Online (Sandbox Code Playgroud)
Python中的一个例子:
means = array([0.0, 0.0, 34.28, 0.0, 0.0, 3.4])
stds = array([ 4.839339, 4.839339, 4.092728, 0.141421, 0.141421, 0.141421])
def fn():
steps = means+stds*numpy.random.normal(size=(60,6))
A = identity(4)
for step in steps:
A = dot(A, transform_step_to_4by4(step))
%timeit fn()
1000 loops, best of 3: 570 us per loop
Run Code Online (Sandbox Code Playgroud)
在Cython/Numpy中实现此算法比使用具有所有优化的Eigen/C++的等效代码慢大约100倍.不过,我真的不想使用C++.
这是我的代码的快速片段,用于解析分子动力学模拟的PDB文件:
Structure *s = new Structure(pdb_filename);
Chain *c = new Chain();
while( ... read file ... ) {
if ( ... new chain ... ) {
Chain *c = new Chain();
s->add_child(c); // Add reference to a vector to
// save the Chain for later
}
}
Run Code Online (Sandbox Code Playgroud)
调用包含函数时,代码将正常运行,并提供全新的结构和链对象,如代码段的前两行所示.
当循环遍历文件时再次满足新链的条件时,代码将返回与之前相同的链指针.
g ++会一遍又一遍地给出相同的指针吗?有没有办法解决这个问题?如果我将c指针添加到's'子矢量,我假设调用delete c会导致更大的麻烦?