2

我正在通过移植我在 matlab/octave 中编写的一些代码来尝试 numpy。在 matlab 中,我可以定义一个 python 切片的等价物,然后根据需要对其进行递增。例如,在我的 matlab 代码中,我有

HXx_range = 1:NHXx;
HXy_range = 1:NHXy;

blah blah blah

Hx(HXx_range, HXy_range) = Da(Hx_media(HXx_range, HXy_range)).*Hx(HXx_range, HXy_range) + Db(Hx_media(HXx_range, HXy_range)).*(Ez(HXx_range,HXy_range) -   Ez(HXx_range,**HXy_range+1**));
Hy(HYx_range, HYy_range) = Da(Hy_media(HYx_range, HYy_range)).*Hy(HYx_range, HYy_range) + Db(Hy_media(HYx_range, HYy_range)).*(Ez(**HYx_range+1**,HYy_range) - Ez(HYx_range,HYy_range));
Ez(EZx_range, EZy_range) = Ca(Ez_media(EZx_range, EZy_range)).*Ez(EZx_range, EZy_range) + Cb(Ez_media(EZx_range, EZy_range)).*(Hy(EZx_range,EZy_range) - Hy(**EZx_range-1**,EZy_range) + Hx(EZx_range,**EZy_range-1**) - Hx(EZx_range,EZy_range));

'**' 中的术语(如 'HXy_range+1')是它们的关键部分;HXy_range+1 等于 2:(NHXy+1)。在 python 中,我可以用类似的方式定义一个切片:

HXx_range = slice(0, NHXx)

但是, HXx_range+1 给了我一个错误。当然,我可以为此制作一个新切片,但它并不那么干净。有没有解决的办法?

谢谢。

4

2 回答 2

3

如果将您定义HXy_range为 numpy 数组,则可以根据需要递增它。如果并且当您希望将其用作切片时,您可以形成slice(*HXy_range)

In [26]: HXy_range = np.array([1,10])

In [27]: HXy_range+1
Out[27]: array([ 2, 11])

In [28]: slice(*(HXy_range+1))
Out[30]: slice(2, 11, None)
于 2012-04-16T19:06:33.197 回答
1

不,Pythonslice实例是不可变的。要使用标准slice实例,您必须每次都创建一个新实例。很遗憾,slice你也不能子类化。

于 2012-04-16T18:57:42.093 回答