【问题标题】:Access multiple items of list访问多个列表项
【发布时间】:2021-04-10 04:34:21
【问题描述】:

我目前正在尝试实现一个重播缓冲区,在其中我将 20 个数字存储在一个列表中,然后想随机抽样其中的 5 个数字。

我用 numpy 数组尝试了以下操作:

ac = np.zeros(20, dtype=np.int32)

for i in range(20):
    ac[i] = i+1

batch = np.random.choice(20, 5, replace=False)
sample = ac[batch]

print(sample)

这按它应该的方式工作,但我希望用一个列表而不是一个 numpy 数组来做同样的事情。

但是当我尝试使用列表获取 sample = ac[batch] 时,我收到以下错误消息:

TypeError: 只有整数标量数组可以转换为标量索引

如何像使用 numpy 一样访问列表的多个元素?

【问题讨论】:

标签: python arrays list numpy


【解决方案1】:

对于列表,这很容易。只需使用 random 模块中的示例函数:

import random

ac = [i+1 for i in range(20)]
sample = random.sample(ac, 5)

另外附注:当您想创建一个包含一系列数字的 numpy 数组时,您不必创建一个包含零的数组然后将其填充到 for 循环中,这不太方便,也很重要比使用 numpy 函数 arange 慢。

ac = np.arange(1, 21, 1)

如果你真的想创建一个包含你想要访问的索引的批处理列表,那么你将不得不使用列表推导来访问这些,因为你不能只索引一个具有多个索引的列表,比如一个 numpy 数组。

batch = [random.randint(0, 20) for _ in range(5)]
sample = [ac[i] for i in batch]

【讨论】:

  • 感谢旁注,我会记住的。但是我不能使用你的解决方案,因为我保存了多个被采样的变量。而且我需要它们的索引匹配,所以如果我从 ac 中采样 5 个随机数,我将需要另一个变量的值在相同的 indeces
  • 看看我上次的编辑。这是您可以根据索引列表从一个列表中选择元素的方法。您可以对多个列表重复该过程,从这些列表中选择批量存储的索引处的值。
猜你喜欢
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2021-10-04
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多