具有复杂步长的 numpy 数组切片是什么意思?

What does a numpy array slice with complex step size mean?

我在 numpy docs 中遇到了一个示例,其中有一个示例在切片内具有复杂的步长(参见第二个示例)。

通过实验,我可以看出它在做什么;它类似于 np.linspace.

In [42]: np.r_[-1:1:1j]
Out[42]: array([-1.])

In [43]: np.r_[-1:1:2j]
Out[43]: array([-1.,  1.])

In [44]: np.r_[-1:1:3j]
Out[44]: array([-1.,  0.,  1.])

In [45]: np.r_[-1:1:4j]
Out[45]: array([-1.        , -0.33333333,  0.33333333,  1.        ])

In [46]: np.r_[-1:1:5j]
Out[46]: array([-1. , -0.5,  0. ,  0.5,  1. ])

In [47]: np.r_[-1:1:6j]
Out[47]: array([-1. , -0.6, -0.2,  0.2,  0.6,  1. ])

In [48]: np.all(np.r_[-1:1:6j] == np.linspace(-1, 1, 6))
Out[48]: True

但我不明白为什么这是预期的。如果我们从数学上考虑,添加一个复数不应该改变数字的实部,只会改变它的幅度,它只会随着每一步而增长!

我试着查看索引文档:在 user guide, as well as the API docs;都没有提到切片中的复杂步长。

非常感谢任何解释。

编辑:我没有彻底阅读文档,正如接受的答案所指出的那样,行为如文档中所述。

在您提供的 reference 中说:

"但是,如果 step 是虚数(即 100j),则其整数部分被解释为所需的点数,并且开始和结束都包括在内。换句话说,start:stop:stepj 被解释为as np.linspace(start, stop, step, endpoint=1) inside the brackets. 在切片符号扩展后,所有逗号分隔的序列连接在一起。“

因此,当您使用虚数切片索引时 - 您包括数组中的最后一个点,如 numpy.linspace 参考文献 here.

中所述

因此在您的示例中 - 1 包含在您的所有示例中,因为它是 stop 项。

如果我们将 stop 更改为 10,例如,我们将得到:

in: np.r_[-10:10:6j]
out: array([-10.,  -6.,  -2.,   2.,   6.,  10.])

干杯。