Python中的等价表达式

时间:2013-07-18 15:22:08

标签: python c numpy

我是一个Python n00b,冒着问一个基本问题的风险,我走了。

我正在将一些代码从C移植到Python,原因是我不想进入。

在C代码中,我有一些代码可以在下面重现。

float table[3][101][4];
int kx[6] = {0,1,0,2,1,0};
int kz[6] = {0,0,1,0,1,2};

我想要下面的C代码的等效Python表达式:

float *px, *pz;
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;

有人可以通过向我提供Python中的等效表达来帮助我吗?

2 个答案:

答案 0 :(得分:3)

这就是......你不能在python中做指针,所以你在这里展示的内容并不是“便携式的”:

float *px, *pz;    <-- this doesn't exist
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;
^    ^                      ^
|    |                      |
+----+----------------------+---- Therefore none of this makes any sense...

你要做的是在多维数组table中有一个指向某个偏移量的指针,因为你不能在python中这样做,你不想逐字地“移植”这段代码。

遵循这个以外的逻辑,您使用pxpz 做什么?这是尝试和移植时需要了解的代码。

答案 1 :(得分:0)

你的C代码没有直接的等价物,因为Python没有指针或指针算术。相反,重构代码以使用括号表示法索引到表中。

table[kx[i]][0][lx] = 3

将大致相当于C

px = &(table[kx[i]][0][0])+lx;
*px = 3;

请注意,在Python中,您的表不会是连续的。特别是,虽然这可能适用于C:

px[10] = 3; // Bounds violation!

这将是Python中的IndexError:

table[kx[i]][0][lx + 10] = 3