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

转置Polars列中的二维数组元素

转置Polars列中的二维数组元素

嘿,看起来你正在处理一个Polars DataFrame,其中列b的每个元素都是800×3的二维float32数组,想要把这些数组逐个转置成3×800的形状对吧?先把你提供的原始数据构建代码补全一下,方便后续操作:

# /// script
# requires-python = ">=3.13"
# dependencies = [
#     "numpy",
#     "polars",
# ]
# ///
import numpy as np
import polars as pl

n_rows = 5

a = np.random.uniform(size=n_rows).astype(np.float32)
b = np.random.uniform(size=(n_rows, 800, 3)).astype(np.float32)

df = pl.DataFrame(
    {
        "a": a,
        "b": b
    },
    schema={
        "a": pl.Float32,
        "b": pl.Array(pl.Array(pl.Float32, 3), 800)
    }
)

下面给你两种实用的处理方法:

方法一:结合Numpy转置(直观易理解)

这个方法用map_elements遍历列中的每个数组元素,借助numpy的转置功能完成操作,非常直观:

# 转置b列中的每个二维数组
df_transposed = df.with_columns(
    pl.col("b").map_elements(
        lambda arr: np.transpose(arr),
        return_dtype=pl.Array(pl.Array(pl.Float32, 800), 3)
    )
)

# 验证转置结果:查看第一行b元素的形状
print(df_transposed["b"][0].shape)  # 输出 (3, 800)

这里需要注意指定return_dtype,告诉Polars转置后的数组结构——外层是3个元素,每个元素是包含800个float32的数组,对应转置后的形状。

方法二:Polars原生操作(性能更优)

如果你的数据集规模较大,优先考虑这种纯Polars原生操作的方式,不需要依赖numpy,能更好地利用Polars的向量化优化:

# 用Polars数组API完成转置
df_transposed = df.with_columns(
    pl.col("b")
    .arr.eval(pl.element().arr.to_list())  # 将内层数组转为列表,方便转置
    .arr.transpose()  # 对数组进行转置
    .arr.eval(pl.element().cast(pl.Array(pl.Float32, 800)))  # 转回Polars数组类型
)

转置完成后同样可以通过查看元素形状来确认结果是否符合预期。

备注:内容来源于stack exchange,提问作者DJDuque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 15:58:15