【问题标题】:Extracting elements from a list of list从列表列表中提取元素
【发布时间】:2018-11-06 03:05:12
【问题描述】:

我有一个数据集,它是一个列表,它的元素又是一个列表。 例如,myList = [[1,2,3],[4,5,6],.......,[7,8,9],[11,12,14]]。我想从这个列表中随机选择一堆元素——比如说,[4,5,6] 和 [11,12,14]。如何做到这一点?

我尝试了以下方法:

# Suppose List_1 has 1000 elements(lists) and I want 100 elements
indices = np.random.choice(myList, size = 100, replace = None )
new_list = myList[indices]

显然,上面的代码不起作用。错误信息是:“列表索引必须是整数或切片,而不是列表”

谁能帮我解决这个问题?我的实际意图是从原始数据集(列表)中采样数据点(列表),以创建一批用于训练 ML 算法的数据。

【问题讨论】:

  • 您尝试为此使用 numpy 有什么原因吗?你可以使用random.choice
  • 问题与machine-learning 无关 - 请不要向标签发送垃圾邮件(已删除)。

标签: python list


【解决方案1】:

使用random.sample,它带有一个附加参数来指定要从总体中选择的随机项目数:

import random

myList = [[1,2,3],[4,5,6],[7,8,9],[11,12,14]]
print(random.sample(myList, 2))

【讨论】:

  • 假设我有两个列表:myList1(例如:输入数据)和 myList2(例如:输出数据),每个列表具有相同数量的元素(它们是列表)并且具有 1-1 对应关系。有没有办法可以从这两个列表中随机采样元素,以便提取的元素具有相同的索引?
【解决方案2】:

你在最后一行有一个错误,但我仍然认为它最接近你的意图(使用 numpy)

indices = np.random.choice(range(len(myList)), size = 100, replace = None )
new_list = myList[indices]

【讨论】:

  • 是的,我在这里发布时出错了。我现在已经编辑了帖子。谢谢
  • 但仍然使用此语法提取所选元素的索引是另一种选择,而不使用示例
【解决方案3】:

您可以考虑随机 - 随机变量生成器,如果您希望选择任意数量的列表元素,那么就像 @Austin 建议的那样使用 sample 和随机但公平的选择是随机的。

使用random.sample 将是......

>>> lst
[['15', '48', '698'], ['10', '32', '66'], ['78', '501', '23']]

>>> random.sample(population=lst, k=2)
[['78', '501', '23'], ['15', '48', '698']]

使用时 random.choices

>>> random.choices(population=lst, k=2)
[['15', '48', '698'], ['15', '48', '698']]

注意

The random Doc这里

random.sample(population, k) 返回一个 k 长度的唯一元素列表 从种群序列或集合中选择。用于随机抽样 无需更换。

random.choices(population, weights=None, *, cum_weights=None, k=1) 返回从总体中选择的 k 大小的元素列表 替换。如果人口为空,则引发 IndexError。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 2015-03-24
    • 2023-01-28
    • 1970-01-01
    • 2023-01-10
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多