gpt4 book ai didi

python - Python/numpy 中的 n 维网格

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:41 26 4
gpt4 key购买 nike

我有一个未知数量的 n 变量,它们的范围从 0 到 1,具有一些已知的步骤 s,条件是它们总和为 1。我想要创建所有组合的矩阵。例如,如果 n=3s=0.33333 那么网格将是(顺序不重要):

0.00, 0.00, 1.00
0.00, 0.33, 0.67
0.00, 0.67, 0.33
0.00, 1.00, 0.00
0.33, 0.00, 0.67
0.33, 0.33, 0.33
0.33, 0.67, 0.00
0.67, 0.00, 0.33
0.67, 0.33, 0.00
1.00, 0.00, 0.00

我怎样才能为任意的 n 做到这一点?

最佳答案

这是一个使用 itertools.combinations 的直接方法:

>>> import itertools as it
>>> import numpy as np
>>>
>>> # k is 1/s
>>> n, k = 3, 3
>>>
>>> combs = np.array((*it.combinations(range(n+k-1), n-1),), int)
>>> (np.diff(np.c_[np.full((len(combs),), -1), combs, np.full((len(combs),), n+k-1)]) - 1) / k
array([[0. , 0. , 1. ],
[0. , 0.33333333, 0.66666667],
[0. , 0.66666667, 0.33333333],
[0. , 1. , 0. ],
[0.33333333, 0. , 0.66666667],
[0.33333333, 0.33333333, 0.33333333],
[0.33333333, 0.66666667, 0. ],
[0.66666667, 0. , 0.33333333],
[0.66666667, 0.33333333, 0. ],
[1. , 0. , 0. ]])

如果速度是一个问题,itertools.combinations 可以替换为 numpy implementation .

关于python - Python/numpy 中的 n 维网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49296665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com