python - 你能在Python中增加一个切片吗?

标签 python numpy

我正在通过移植我在 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 给了我一个错误。当然,我可以为此制作一个新切片,但它不是那么干净。有办法解决这个问题吗?

谢谢。

最佳答案

如果您将 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)

关于python - 你能在Python中增加一个切片吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10179929/

相关文章:

python - 有没有更快的(numpy?)方法将 pandas df int 列组合成点分隔的 str col 而不出现 TypeError

python - 如何输入传递给 numpy.asarray 的变量以生成 2D float 组?

python - 为什么 "type"不在 "int"的 MRO 中?

python - 将所需数据从一个文件复制到python中的另一个文件

python - 如何在 PyYaml.load 中默认使用 CLoader

python - 矢量化(手动)正向替换

python - 为什么通过 Python 的 numpy.loadtxt 导入的时间戳会延迟 6 到 7 个小时?

python - 这段 python 代码中的语法是否正确?

python - 字符串列表到整数元组

python - 将多张图像连接成一张