【发布时间】:2017-09-29 09:27:31
【问题描述】:
我有一个索引i 正在运行,它指示如何对特定数组a 进行切片。例如,
a = np.arange(10)
for i in np.arange(1, 5):
print(a[i:], a[:-i])
输出
[1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8]
[2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7]
[3 4 5 6 7 8 9] [0 1 2 3 4 5 6]
[4 5 6 7 8 9] [0 1 2 3 4 5]
但是,这不适用于i=0:
a[0:]
Out[67]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[:-0]
Out[68]: array([], dtype=int64)
我预期/需要的输出会在哪里
a[0:]
Out[67]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[:-0]
Out[67]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
这种不对称的原因是什么?最终,我需要
- 从两端选择越来越少
- 角落案例:从每一端只选择一个(我通常可以通过
a[i:]和a[:-i]完成,当i==9 - 极端情况:从两端全选(这将不起作用,因为
a[:-0]返回的结果不是预期的。
我怎样才能做到这一点?
【问题讨论】:
-
因为
-0是0... -
@WillemVanOnsem 通常这不是真的。例如,请参见浮点算术的当前标准,即使为零也需要符号。 en.wikipedia.org/wiki/IEEE_754 - 在这种情况下 numpy 可以将它们视为相同,但 它们不相同
-
虽然 IEEE-754 使用有符号幅度表示。即便如此,
-0也被认为与0是相同。然而,通常整数使用 2 补码表示。