【问题标题】:Generic way of getting array up to last index: Include all indices获取数组到最后一个索引的通用方法:包括所有索引
【发布时间】: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] 返回的结果不是预期的。

我怎样才能做到这一点?

【问题讨论】:

  • 因为-00...
  • @WillemVanOnsem 通常这不是真的。例如,请参见浮点算术的当前标准,即使为零也需要符号。 en.wikipedia.org/wiki/IEEE_754 - 在这种情况下 numpy 可以将它们视为相同,但 它们不相同
  • 虽然 IEEE-754 使用有符号幅度表示。即便如此,-0 也被认为与0相同。然而,通常整数使用 2 补码表示。

标签: python arrays numpy slice


【解决方案1】:

因为-00(至少在最流行的表示是2-补码的整数域中)并且首先计算一元减号。对于浮点,-00 有两个表示,但通常编程语言会对此进行抽象。

但是,在这种情况下,您可以使用None,因此您可以将其写为:

a = np.arange(10)
for i in np.arange(0,10):
    print(a[i:], a[:-i or None])

对于i=0,返回:

[0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-19
    • 2023-02-23
    • 2016-02-16
    • 2014-05-09
    • 1970-01-01
    • 2019-11-20
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多