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

numpy 配列として定義するHXy_rangeと、必要に応じてインクリメントできます。スライスとして使用したい場合は、次のように作成できます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 に答える