为飞桨PaddlePaddle实现笛卡尔直积
笛卡尔直积(Cartesian Product)是指两个或多个集合之间的所有可能的有序组合。
比如有两个集合,分别是(1, 2 ) 和(3, 4),那么笛卡尔直积的结果就是:
(1, 3)(1,4)(2,3)(2,4)
在飞桨中,是没有笛卡尔直积这个计算函数的,但是可以辅助实现,比如使用itertools.product
来方便地生成两个或多个可迭代对象的笛卡尔直积。
import itertools
import paddle
# 假设我们有两个集合
x = paddle.to_tensor((1, 2))
y = paddle.to_tensor((3, 4))
# 使用itertools.product生成笛卡尔直积
cartesian_product = list(itertools.product(x, y))
# 将结果转换为Paddle张量并打印
print(paddle.to_tensor(cartesian_product))
最终写了一个笛卡尔直积函数paddlecartesian_prod,它是这样的:
# 最终版本笛卡尔直积函数支持变长变量输入
from itertools import product
def paddlecartesian_prod(*x): # 飞桨版本的笛卡尔直积函数
z = list(product(*x))
z = paddle.to_tensor(z)
return z.squeeze(axis=-1)
x = paddle.to_tensor((1, 2))
y = paddle.to_tensor((3, 4))
print(paddlecartesian_prod(x, y))
再测试一下多输入:
x = paddle.to_tensor((1, 2))
y = paddle.to_tensor((3, 4))
z = paddle.to_tensor((5, 6))
print(paddlecartesian_prod(x, y, z))
输出这样:
Tensor(shape=[8, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[1, 3, 5],
[1, 3, 6],
[1, 4, 5],
[1, 4, 6],
[2, 3, 5],
[2, 3, 6],
[2, 4, 5],
[2, 4, 6]])
不错,很好的完成了任务。
标签:product,tensor,笛卡尔,PaddlePaddle,paddle,飞桨,直积,itertools From: https://blog.csdn.net/skywalk8163/article/details/144873323