【问题标题】:Random boolean array with fixed number of True and False values具有固定数量的 True 和 False 值的随机布尔数组
【发布时间】:2019-07-19 09:45:14
【问题描述】:

我想创建一个二维数组,每行有固定数量的TrueFalse。这是生成TrueFalse的随机数组的代码:

np.random.choice(a=[False, True], size=(N, N), p=[p, 1-p])

此代码将为我提供一个 N*N 数组,False 的概率为 pTrue 的概率为 1-p。现在我想在每一行中设置固定数量的FalseTrue,而且也是随机的。如何在 Python 中做到这一点?

这里有一些其他相关的问题,但与我要问的不同:

Example in C

Example in C#

Example but without specific number of True and False

编辑: 我应该补充一点,this 链接对我也没有帮助。正如我的问题所见,我想要一个随机的布尔二维数组。因此,创建一个 2d 数组并对其进行改组不会有帮助( shuffle 不会独立地改组项目,它只能移动列或行),因此它不是随机数组。请打开我的问题,让人们回答。

【问题讨论】:

  • 随机排列一维数组并将其重塑为您想要的二维形状。
  • @user2357112 我希望每行有相同数量的 True 和 False。它不工作
  • “我希望每行有相同数量的 True 和 False”——这不是你的问题。
  • @user2357112 好的。已编辑。
  • @user2357112 我可以将其删除并作为新问题发布吗?

标签: python arrays numpy random boolean


【解决方案1】:

如果每行所需的True(或False)值的数量是只有一个

# size of our array
M = 5 # rows
N = 3 # columns

# create an array full of "False"
foobar = np.full((M,N), False)

# create a list of randomly picked indices, one for each row
idx = np.random.randint(N, size=M)

# replace "False" by "True" at given indices
foobar[range(M), idx] = True

不过,这种方法不适用于每行多个 True 值。

【讨论】:

  • 如果我们只希望每行一项为 False 是否可行?
  • @Paniz 当然,只需切换 TrueFalse 的两次出现。实际上它可以与任何一对值一起使用,它们不必是布尔值。
  • 我需要在每一行中有特定数量的 True 和 False。当我们每行有一个 True(其余为 False)或一个 False(其余为 True)时,它才有效。
  • @Paniz 确实,这一点在我的回答的第一句话中被强调了。 ;)
  • 是的。非常感谢
猜你喜欢
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 2013-09-25
  • 2015-07-06
相关资源
最近更新 更多