You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算由重复向量组成的列表的笛卡尔积?

解决方案:生成向量维度的全组合列表

听起来你想要的是基于原向量列表中每个维度的元素,生成所有可能的组合向量——也就是对每个维度的元素集合做笛卡尔积,对吧?我来给你一步步拆解实现方法,用Python举例说明:

核心思路

我们的目标是:

  • 先把原列表中的所有向量按「维度」拆分,比如有n个d维向量,就拆成d个列表,每个列表包含所有向量在该维度上的元素
  • 然后对这d个列表做笛卡尔积,得到所有可能的d维组合向量

代码实现

1. 导入工具库

我们用Python标准库中的itertools.product来快速生成笛卡尔积:

import itertools

2. 定义原向量列表

拿你的例子来说,重复2次的3维向量:

# 原向量列表:n=2,每个向量是(1,2,3)
vec_list = [(1, 2, 3), (1, 2, 3)]

3. 按维度拆分向量

用zip(*vec_list)可以把所有向量的对应维度元素打包到一起:

# 拆分后得到每个维度的元素集合
dimensions = list(zip(*vec_list))
# 此时dimensions的值是 [(1, 1), (2, 2), (3, 3)]

4. 生成全组合向量

把拆分后的维度列表传入itertools.product,就能得到所有可能的组合:

# 生成所有组合并转为列表
result = list(itertools.product(*dimensions))
print(result)
# 输出:[(1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3)]

5. (可选)去除重复组合

因为你的例子中所有向量都是重复的,生成的组合会有大量重复。如果需要去重,可以转成集合再转回列表:

result = list(set(itertools.product(*dimensions)))
print(result)
# 输出:[(1, 2, 3)]

扩展示例(非重复向量)

如果原列表是不同的向量,比如[(1,2,3), (4,5,6)],运行同样的代码会得到所有8种可能的组合:

vec_list = [(1, 2, 3), (4, 5, 6)]
dimensions = list(zip(*vec_list))
result = list(itertools.product(*dimensions))
print(result)
# 输出:[(1, 2, 3), (1, 2, 6), (1, 5, 3), (1, 5, 6), (4, 2, 3), (4, 2, 6), (4, 5, 3), (4, 5, 6)]

内容的提问来源于stack exchange,提问作者aliasguru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:43:26