Polars中是否存在等价于np.outer()的实现方法?
在Polars中实现类似numpy.outer()的外积方法
Polars本身没有直接提供和np.outer()完全同名的函数,但可以通过几种简洁直观的方式实现等价的外积效果:
方法一:利用广播机制(最接近numpy思路)
通过将两个一维Series重塑为二维结构(一个列向量、一个行向量),Polars会自动触发广播机制完成逐元素相乘,和np.outer()的实现逻辑一致:
import polars as pl # 定义输入向量 vec1 = pl.Series([1, 2, 3]) vec2 = pl.Series([4, 5, 6]) # 计算外积 outer_product = vec1.reshape((-1, 1)) * vec2.reshape((1, -1)) print(outer_product)
输出结果会是一个3×3的矩阵,和np.outer(vec1.to_numpy(), vec2.to_numpy())的结果完全一致。
方法二:通过交叉连接+透视表
如果需要以DataFrame形式展示带行列标签的结果,可以用交叉连接生成所有元素对,计算乘积后再透视成矩阵:
df1 = pl.DataFrame({"x": vec1}) df2 = pl.DataFrame({"y": vec2}) outer_df = ( df1.cross_join(df2) .with_columns(product=pl.col("x") * pl.col("y")) .pivot(index="x", columns="y", values="product") ) print(outer_df)
这种方式会保留原始向量的元素作为行和列的标签,适合需要直观查看对应关系的场景。
验证结果一致性
可以和numpy的结果做对比确认:
import numpy as np np_result = np.outer(vec1.to_numpy(), vec2.to_numpy()) print(np.array_equal(outer_product.to_numpy(), np_result)) # 输出 True
内容的提问来源于stack exchange,提问作者GBPU
相关产品推荐
相关产品推荐

