【问题标题】:Numpy array Indexing with other arrays yields broadcasting errorNumpy 数组索引与其他数组产生广播错误
【发布时间】:2020-12-29 01:37:18
【问题描述】:

我有两个索引数组。

elim=range(130,240)
tlim=range(0,610)

要索引的数组I的原始形状为(299, 3800)

当我尝试按如下方式对其进行索引时

I[elim,tlim]

我收到以下错误消息。

形状不匹配:索引数组无法与形状 (110,) (610,) 一起广播

我没想到会出现这样的错误。有人可以解释这里发生了什么吗?

谢谢!

【问题讨论】:

  • 如果数组有 299 行,那么您希望如何索引到第 610 行? (虽然错误是由其他原因引起的)
  • 对不起,我在问题中犯了一个错误。现已更正
  • 我认为你想要:my_array[130:240, :610](你不应该覆盖 std.lib 的 len 函数)
  • 是的,但我不想把数字放在那里。感谢您的帮助!
  • 通过高级索引(列表或数组),索引数组broadcast 相互对抗。 (n,) 数组将与 (n,) 产生 (n,) 结果一起使用。 A (n,1) 将与 (1,m) 一起产生 (n,m) 结果。与添加或相乘数组时的广播规则相同。

标签: python arrays numpy multidimensional-array indexing


【解决方案1】:

让我们用一个指定形状的随机数组重现这个例子:

elim=range(0,610)
tlim=range(130,240)
a = np.random.rand(299, 3800)

a[tlim, elim]

IndexError: 形状不匹配:索引数组无法与形状 (110,) (610,) 一起广播

这会引发错误,因为您正在使用整数索引数组来索引数组,因此advanced indexing 规则将适用。 你应该在这个例子中使用切片

a[130:240,0:610].shape
# (110, 610)

请参阅Understanding slice notation(NumPy 索引,只是将同一概念扩展到 n 维数组。

如果你有一个索引列表,不一定可以表示为切片,你有np.ix_。有关 numpy 索引的更多信息,this 可能会有所帮助

a[np.ix_(tlim, elim)].shape
# (110, 610)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-19
    • 2017-04-23
    • 2018-12-13
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多