小编Mik*_*ike的帖子

Malloc是C中的三维数组?

我正在将一些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中动态分配三维数组?

c arrays multidimensional-array

28
推荐指数
5
解决办法
4万
查看次数

在3D中拟合一条线

是否有任何算法可以从一组3D数据点返回直线方程?我可以找到很多来源,这些来源将给出2D数据集中的线的等式,但没有3D.

谢谢.

python numpy linear-algebra curve-fitting

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

Python中的快速,小型和重复矩阵乘法

我正在寻找一种方法,使用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++.

python optimization numpy scientific-computing cython

4
推荐指数
1
解决办法
2099
查看次数

在同一个for循环中多次调用new

这是我的代码的快速片段,用于解析分子动力学模拟的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会导致更大的麻烦?

c++ dynamic new-operator

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