笛卡尔积 +运算

笛卡尔积的符号化为:
A×B={(x,y)|x∈A∧y∈B}

例如,A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

Numpy:x和y数组点的笛卡儿乘积成二维点的单个数组

两个numpy数组,它们定义了网格的x和y轴。例如:
x = numpy.array([1,2,3])y = numpy.array([4,5])
生成这些数组的笛卡儿积

array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
在某种程度上,这并不是非常低效率,因为我需要在一个循环中多次这样做。我假设将它们转换为Python列表并使用itertools.product返回到numpy数组并不是最有效的形式。

>>> numpy.transpose([numpy.tile(x, len(y)), numpy.repeat(y, len(x))])array([[1, 4],
       [2, 4],
       [3, 4],
       [1, 5],
       [2, 5],
       [3, 5]])

N=4
I=range(1,N)
J=range(1,N)
print(np.kron(I,J))

x=np.arange(1,N)
y=np.arange(1,N)
V1=np.transpose([np.repeat(y, len(x)),np.tile(x, len(y))])
#%%
[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

看见使用numpy构建两个数组的所有组合的数组关于计算N个数组的笛卡儿乘积的一般解。

您可以在python中进行正常的列表理解。

x = numpy.array([1,2,3])y = numpy.array([4,5])[[x0, y0] for x0 in x for y0 in y]
这应该给你

[[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]

Numpy:x和y数组点的笛卡儿乘积成二维点的单个数组_慕课猿问 https://www.imooc.com/wenda/detail/564541

https://stackoverflow.com/questions/1208118/using-numpy-to-build-an-array-of-all-combinations-of-two-arrays

d={(i,j):i+j for i in range(1,4) for j in range(1,4)}

print(d)
{(1, 1): 2, (1, 2): 3, (1, 3): 4, (2, 1): 3, (2, 2): 4, (2, 3): 5, (3, 1): 4, (3, 2): 5, (3, 3): 6}

### 笛卡尔积运算的概念 笛卡尔积是一种数学概念,表示两个集合 \( A \) 和 \( B \) 的所有可能的有序对组合。其形式化定义为: \[ C = A \times B = \{<x, y> | x \in A \land y \in B\} \] 这意味着对于集合 \( A \) 中的每个元素 \( x \),以及集合 \( B \) 中的每个元素 \( y \),都会形成一个有序对 \( <x, y> \)[^3]。 当应用于编程时,这种操作可以被看作是对多个列表或数组进行遍历并生成所有可能的配对结果的过程[^1]。 --- ### 数学中的应用 在数学中,笛卡尔积广泛用于描述关系、函数和其他结构化的对象。例如,在几何空间中,二维平面可以通过实数集 \( R \) 自身的笛卡尔积 \( R \times R \) 来建模;三维空间则是通过 \( R \times R \times R \) 表达[^2]。 此外,它还常用于概率论和统计学中计算事件的可能性组合。比如掷两次骰子的所有可能结果可以用两组数字 {1, 2, ..., 6} 的笛卡尔积来表达。 --- ### 编程中的实现方法 #### 输入验证 为了确保输入的数据符合集合的要求(无重复项),需要先检查集合 \( A \) 和 \( B \) 是否满足条件。如果不满足,则应返回错误提示 `"a or b is not set"`[^3]。 以下是 Python 实现的一个例子: ```python def cartesian_product(A, B): # 验证输入是否为有效集合 if len(set(A)) != len(A) or len(set(B)) != len(B): return " a or b is not set " result = [] for a in A: for b in B: result.append((a, b)) return result ``` 上述代码片段实现了基本的笛卡尔积功能,并遵循了输入校验规则。 #### 使用内置工具优化 Python 提供了一个更简洁的方法——利用 `itertools.product` 函数完成相同的功能: ```python import itertools def cartesian_product_itertools(A, B): if len(set(A)) != len(A) or len(set(B)) != len(B): return " a or b is not set " return list(itertools.product(A, B)) ``` 这种方法不仅提高了可读性,而且性能上也更加高效。 --- ### 应用场景举例 1. **数据库查询**:SQL 查询语句中的交叉连接 (CROSS JOIN) 就是基于笛卡尔积的思想构建出来的。 2. **机器学习特征工程**:有时会通过对不同类别变量做笛卡尔积扩展新的特征维度。 3. **游戏开发路径规划**:模拟角色移动方向与速度变化之间的各种可能性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值