【问题标题】:Finding all n-lets (pairs, triplets, quadruplets, etc.) of a numpy array查找 numpy 数组的所有 n-let(对、三胞胎、四胞胎等)
【发布时间】:2019-11-17 00:32:04
【问题描述】:

我想编写一个函数,它接收一个整数列表(例如L = [0,1,-1])和一个整数(例如n = 3)并返回该列表的所有(例如三元组):[0,0,0],[0,0,1],...[-1,-1,-1] 其中会有len(L)**n。如果我致力于n=3,我可以这样做:

np.array(np.meshgrid(L,L,L)).T.reshape(-1,3)

但是,如果我想将该 3 更改为不同的数字,我需要将我的列表输入到 meshgrid n 次。是否有一种适用于任意n 的巧妙方法?我希望我正在尝试做的事情是有意义的。似乎函数已经存在的那种东西,但我似乎找不到任何东西。

【问题讨论】:

  • itertools.product 有一个方便的repeat 参数

标签: python numpy combinations permutation


【解决方案1】:

通过[L for _ in range(n)] 创建重复n 次的L 列表。然后只需使用星号运算符将此列表取消引用到 meshgrid 函数。 What does the star operator mean, in a function call?

n = 2
>>> np.array(np.meshgrid(*[L for _ in range(n)])).T.reshape(-1, n)
array([[ 0,  0],
       [ 0,  1],
       [ 0, -1],
       [ 1,  0],
       [ 1,  1],
       [ 1, -1],
       [-1,  0],
       [-1,  1],
       [-1, -1]])

【讨论】:

  • 或者干脆np.array(np.meshgrid(*n*(L,))).T.reshape(-1,n)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多