Drake中Numpy风格矩阵索引赋值问题及计算图有效性咨询
Drake中numpy风格高级索引赋值的支持问题
问题场景
以下代码在PyTorch及Numpy环境下可正常执行,但在Drake中运行报错:
forces_matrix = np.zeros((T - 1, O, O, D)) tril_indices = np.tril_indices(O, m=O, k=-1) forces_matrix[:, tril_indices[0], tril_indices[1]] = f_oo
其中左值(LHS)与右值(RHS)均为形状为(9, 1, 1)的numpy张量。
补充说明:若将初始forces_matrix设置为Drake的OBJECT类型(如AutoDiffXd数组),则无语法错误,但不确定f_oo与forces_matrix之间的计算图能否正确构建,需确认该操作是否被Drake支持。
问题解答
- 原生numpy数组的限制:Drake对原生numpy数组的高级索引赋值支持有限,因为其计算图追踪机制仅针对自身的数值类型(如
AutoDiffXd、Float64),原生numpy数组无法被纳入计算图,这类操作会触发错误。 - OBJECT类型的有效性:当
forces_matrix初始化为Drake的自定义数值类型数组时,这类numpy风格的高级索引赋值是被支持的,且能正确构建计算图。Drake的数值类型实现了兼容numpy的索引接口,会自动追踪赋值操作的依赖关系,保障后续自动微分或符号计算正常运行。 - 关键注意点:
- 需保证
f_oo的类型与forces_matrix完全匹配,比如两者同为AutoDiffXd类型,避免类型不兼容问题。 - 确认
tril_indices对应的索引位置数量与f_oo的可广播维度对齐,防止维度不匹配的赋值错误。
- 需保证
内容的提问来源于stack exchange,提问作者HoliInn
相关产品推荐
相关产品推荐

