【问题标题】:Generate an equally-sized group of indices in Python在 Python 中生成一组大小相等的索引
【发布时间】:2021-08-03 08:56:33
【问题描述】:

我有兴趣获得一组大小相同的索引。例如,我有以下 Python 代码:

import numpy as np

p = 2
n  = 10
labels = np.random.randint(p, size=n)

上面的代码将创建10 标签(01 值)但不一定0's 的总数等于1's 的总数。我需要的是自动获取相同的数字:例如0 1 0 0 1 1 0 1 0 1(实际上有五个0's 和五个1's)。上述示例的相同概念可以推广到任何pn,使得n/p 是一个整数。

任何帮助将不胜感激!

【问题讨论】:

    标签: python split


    【解决方案1】:

    回答一般情况。

    生成一个列表,然后使用 shuffle

    labels = [int(x/(n/p)) for x in range(0,n)]
    np.random.shuffle(labels)
    

    【讨论】:

    • nb,请确保您先检查 n 和 p 是否有效。
    • 太棒了!非常感谢!
    【解决方案2】:

    只需创建一个具有相同数量的 0 和 1 的列表,然后使用 np.random.shuffle(arr) 随机播放它

    https://numpy.org/doc/stable/reference/random/generated/numpy.random.shuffle.html

    【讨论】:

    • 那么如何创建一个具有相同数量的 0 和 1 的列表?
    • @Christina 多种方式。 [0,0,0,0,0,1,1,1,1,1] :) 或 [0]*5 + [1]*5
    • 可以有多种方法,其中一种可以使用numpy.onesnumpy.zeros 来创建它们,然后将它们连接起来。
    • @KaushalSharma 我认为 JeffUK 写的第二部分是最好的。
    • @Christina 欢迎您。是的,确实是pythonic。但只是提到 Numpy 数组比 python 列表快得多,如果您需要它们用于大规模应用程序,您可能需要阅读它。 stackoverflow.com/questions/8385602/…
    【解决方案3】:

    您可以创建一个包含 0 和 1 的列表并将其随机播放。你可以使用这样的东西

    import numpy as np
    
    p = 2
    n  = 10
    labels = (np.append(np.zeros(int(n/p)),np.ones(int(n/p))))
    np.random.shuffle(labels)
    

    【讨论】:

    • 不幸的是,您的代码仅适用于 p=2。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多