【问题标题】:TypeError when indexing a list with a NumPy array: only integer scalar arrays can be converted to a scalar index使用 NumPy 数组索引列表时出现 TypeError:只能将整数标量数组转换为标量索引
【发布时间】:2019-01-09 07:45:01
【问题描述】:

以下代码:

x = list(range(0,10))
random.shuffle(x)
ind = np.argsort(x)
x[ind]

产生错误:TypeError: only integer scalar arrays can be convert to a scalar index

请注意,我的问题与问题不同, “numpy array TypeError: only integer scalar arrays can be converted to a scalar index”,它正在尝试更复杂的东西。

我在这个问题上的错误是我试图在普通的 python 列表上使用索引列表——请参阅我的答案。我希望它发生的范围比仅仅使用范围和随机播放要广泛得多。

【问题讨论】:

  • 您也可以只使用np.arange(0,10) 而不是list(range(0,10))
  • 让我做对了。通过这样做,输出仍将与您的原始x 相同,即[0,1,2,3,4,5,6,7,8,9]。你同意吗?
  • @Bazingaa 没错。这个问题的重点是说明产生错误“只有整数标量数组可以转换为标量索引”的常见方法
  • @sacul 感谢您的建议。我不知道那个功能。这个问题的重点是说明产生错误“只有整数标量数组可以转换为标量索引”的常见方法
  • 你曾经能够做到这一点。我认为这是 python 3 的变化,而不是 numpy 的变化,但我不确定。我来到这里是因为我在 py2.7 中有旧代码,并且我追踪了一个错误到 range(200)[np.array((119,), dtype=int)],其中 np.array((119,), dtype=int)index = np.where(some_complicated_thing == some_complicated_other_thing) 的缩写 这在 py2.7 和旧版本的 numpy 中有效,只要转换到整数索引是合法的。您也可能出于旧习惯的原因这样做。

标签: python arrays numpy indexing


【解决方案1】:

很好的答案 - 但我要补充一点,如果列表无法转换为 numpy 数组(即您有一个字符串列表),则无法使用上述索引数组对其进行切片。最直接的选择是

[x[i] for i in ind]

【讨论】:

    【解决方案2】:

    问题是我试图索引x,一个普通的 Python 列表,就好像它是一个 numpy 数组一样。要修复它,只需将 x 转换为 numpy 数组:

    x = list(range(0,10))
    random.shuffle(x)
    ind = np.argsort(x)
    x = np.array(x) # This is the key line
    x[ind]
    

    (这已经发生在我身上两次了。)

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 1970-01-01
      • 2020-07-23
      • 2021-10-31
      • 2021-01-17
      • 2019-03-15
      • 2018-04-04
      • 2020-09-24
      • 2018-12-02
      相关资源
      最近更新 更多