一句话:笛卡尔积把多个集合的元素两两配对,生成全部有序组合—— 的元素是有序对 ,总数是

数学定义

两个集合 的笛卡尔积(Cartesian product)定义为:

经典例子是 :整个二维平面,每个点就是一对实数坐标。名字也来自这里——Descartes 用坐标系把几何问题代数化,这个”全量配对”运算后来以他命名。

基数按乘法增长:。3 个字母配 4 个数字,得到 12 个有序对。这个乘法增长是它在组合计数中的地位来源,也是网格搜索、CROSS JOIN 这类工程场景的代价来源,见 排列组合

注意 有序对。所以 一般不等于 ,除非 或其中一边为空集。交换律在这里失效,是初学者最容易忽略的一点。

多个集合与运算性质

有限个集合连乘没有歧义,元素是 n 元组:

对并和交满足分配律:

结合律只在不严格的意义下成立: 的元素形如 ,和 并不相同,但两者与 之间都存在自然双射——工程语境下通常不加区分。

若任一因子为空集,整个积为空集:。这与乘法里的”乘以零”完全同构。

编程里的笛卡尔积

Python 的 itertools.product 把嵌套循环压成一层 forrepeat 参数处理同一集合的自我连乘:

from itertools import product
 
list(product('AB', '12'))      # [('A','1'), ('A','2'), ('B','1'), ('B','2')]
list(product('AB', repeat=2))  # 自我连乘,长度 2^2 = 4

SQL 中两张表不带连接条件的 CROSS JOIN 就是笛卡尔积,行数等于左表行数乘右表行数——忘写 WHERE 时那张爆炸的结果表,就是 增长的直观体验。更多用法见 itertools

深度学习里的场景更隐蔽:网格搜索超参空间 product(lr, batch_size, depth)、batch 索引与时间步的全组合、多-label 任务的候选对齐,本质上都在构造笛卡尔积。