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

suv*_*ayu 5 arrays numpy python-3.x numpy-slicing

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

从实验中,我可以看到它在做什么;它类似于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
Run Code Online (Sandbox Code Playgroud)

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

我尝试查看索引文档:在用户指南中,以及API 文档;都没有提到切片中的复杂步长。

任何解释将不胜感激。

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

Mic*_*ael 3

在您提供的参考文献中说:

“但是,如果 step 是一个虚数(即 100j),那么它的整数部分将被解释为所需的点数,并且开始和结束都包含在内。换句话说,start:stop:stepj 被解释为 np.linspace( start、stop、step、endpoint=1) 在括号内。在切片表示法扩展后,所有逗号分隔的序列都连接在一起。

因此,当您使用虚构切片索引时,您将包含数组中的最后一个点,如参考文献numpy.linspace所述

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

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

in: np.r_[-10:10:6j]
out: array([-10.,  -6.,  -2.,   2.,   6.,  10.])
Run Code Online (Sandbox Code Playgroud)

干杯。