Python 以numpy格式在数据数组中生成所有可能的值?
我正在使用python中的gambit以博弈论的方式模拟一个世界。博弈的一个结构是将“结果”保存为每个参与者做出的一系列决策。其形式如下:Python 以numpy格式在数据数组中生成所有可能的值?,python,numpy,multidimensional-array,game-theory,gambit,Python,Numpy,Multidimensional Array,Game Theory,Gambit,我正在使用python中的gambit以博弈论的方式模拟一个世界。博弈的一个结构是将“结果”保存为每个参与者做出的一系列决策。其形式如下: 游戏[d1,d2,d3,…,dn][n]=回报 其中,d1是玩家1做出的决策索引,d2是玩家2做出的决策索引,依此类推,n是为其存储收益的玩家的索引 现在,可能有不同数量的玩家,因此传递到游戏对象的索引维度可能会改变 如何从[0,0,…,0]到[8,8,…,8](其中维度=玩家数量=n)生成序列,以便将它们存储到[d1,d2,d3,…,dn] 看看pyth
游戏[d1,d2,d3,…,dn][n]=回报
其中,d1
是玩家1做出的决策索引,d2
是玩家2做出的决策索引,依此类推,n
是为其存储收益的玩家的索引
现在,可能有不同数量的玩家,因此传递到游戏
对象的索引维度可能会改变
如何从[0,0,…,0]
到[8,8,…,8]
(其中维度=玩家数量=n)生成序列,以便将它们存储到[d1,d2,d3,…,dn]
看看python的itertools
模块。听起来产品
功能可以满足您的需求
例如:
import itertools as it
list(it.product(*[range(2)]*3))
给出所有长度为3且包含两个元素的列表
[(0, 0, 0),
(0, 0, 1),
(0, 1, 0),
(0, 1, 1),
(1, 0, 0),
(1, 0, 1),
(1, 1, 0),
(1, 1, 1)]
itertools
还有很多其他的可能性,特别是它还提供了排列
和组合
但不太清楚您需要什么。是否要单独生成[0,0,0,…]和[n,n,n,n,…]之间的所有组合(排列?),每个组合的长度为n
?或者你只是需要一个数组的形状(n,n,n)来填充东西?你能给我们举一个最简单的例子来说明两个玩家的期望值吗?对于可能的决策数量是否有维度?@wwii I希望生成[0,0,0,…,0]和[8,8,8,…,8]之间的所有排列,其中索引的维度(长度?)为n。我必须根据n的某个值动态地执行此操作。n
可能有多大?除非n
非常小,否则组合的总数将占用大量RAM。顺便说一句,这种组合称为笛卡尔积。在纯Python中,您可以使用itertools.product
生成它。在Numpy有很多制作笛卡尔产品的方法。