【问题标题】:Combinations of values of column vectors列向量值的组合
【发布时间】:2022-10-07 21:37:56
【问题描述】:

我希望这篇文章能找到你。

我写信给您,请求帮助将列向量的值组合存储在一个 numpy 数组中。

我的问题包括有两个列向量,大小为 nx1 和 mx1,n=m,并找到 n 个组合。

然后我将这些列向量垂直堆叠在一个矩阵中,大小为 nx2。

我找到了与 python 的 itertools.combination 函数的组合,但我很难将它们存储在一个 numpy 数组中,因为 itertools 给出了 n 行元组。

我也附上了我的代码,我为我的幼稚道歉,因为我仍然是 Python 先生的初学者。

谢谢。

我在网上找到的主要示例报告如下:

import itertools
val = [1, 2, 3, 4]
com_set = itertools.combinations(val, 2)

for i in com_set:
 print(i)

输出: (1, 2) (1, 3) (1, 4) (2, 3) (2, 4) (3, 4)

现在,就我而言,我有两个彼此不同的向量 val 和 val1。

而且,我需要一个 numpy 数组中的输出,可能是一个矩阵,所以我可以对这些值应用最大似然估计方法。

【问题讨论】:

  • 我不完全理解你的问题。您是否尝试创建一个包含数组 x 和 y 中的每一对元素的数组?即:x = [1, 2, 3], y = [4, 5, 6], 结果 = [[1,4],[2,4],[3,4],[1,5],[ 2,5],[3,5],[1,6],[2,6],[3,6]]。
  • 下午好 Chrysophylaxs,是的,我是。感谢回复。

标签: python numpy matrix itertools


【解决方案1】:

您正在寻找 itertools.product 而不是 itertools.combinations

x = [1, 2, 3]
y = [4, 5, 6]
z = list(itertools.product(x, y))
# z = [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

只需将结果传递给np.array,您就可以将结果转换为 (n * n, 2) 形状的数组:

result = np.array(z)
# array([[1, 4],
#        [1, 5],
#        [1, 6],
#        [2, 4],
#        [2, 5],
#        [2, 6],
#        [3, 4],
#        [3, 5],
#        [3, 6]])

最后,您也可以直接使用 numpy 执行此操作,尽管顺序不同:

result = np.stack(np.meshgrid(x, y)).reshape(2, -1).T
# array([[1, 4],
#        [2, 4],
#        [3, 4],
#        [1, 5],
#        [2, 5],
#        [3, 5],
#        [1, 6],
#        [2, 6],
#        [3, 6]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2021-11-25
    • 2017-12-07
    • 1970-01-01
    相关资源
    最近更新 更多