如何对xarray DataArray中嵌套的列表元素进行索引?
问题根因
你构造的DataArray是一维object类型数组,仅包含1个长度为2的维度,每个位置存储的是Python原生list对象,不具备第二个规整维度,因此直接使用多维索引语法(如x[0,1])会报错。
正确索引取值方法
取值需要分两步执行,先取出对应位置的list对象,再对list做索引:
- 第一步取对应行的list对象:可以用
x[位置].item()或者x.values[位置]两种写法 - 第二步对取出的list做常规下标索引
举个完整示例:
# 取第一个列表[0,1,2]里的第2个元素(值为1) print(x[0].item()[1]) # 输出:1 # 取第二个列表[3,4]里的第1个元素(值为3) print(x.values[1][0]) # 输出:3
不等长会话数据存储建议
xarray的核心能力是处理维度规整的带标签数据,存储object类型的不等长数组无法发挥其维度广播、分组计算、批量运算等核心特性,针对你的录音会话存储场景,更建议两种方案:
- 用xarray.Dataset嵌套存储,每个会话对应一个独立的DataArray,保留每个录音的独立维度
- 对短录音补NaN填充为统一长度,配合有效长度掩码字段,构造规整维度的DataArray,可正常使用xarray的所有特性
内容的提问来源于stack exchange,提问作者lachieau
相关产品推荐
相关产品推荐

