Numpy创建数组报错TypeError: Field elements must be 2- or 3-tuples
报错原因
你的报错来自内层np.array()的参数写法错误:
np.array()接收的第一个位置参数是待转换的数组序列,第二个位置参数是可选的数据类型指定参数- 你写的
np.array([(delta_B / delta_theta) + Db], [(delta_R / delta_theta) + Dr])把第二个计算值单独放在第二个列表里,作为第二个参数传给了np.array(),Numpy会把这个参数识别为结构化数组的字段定义,要求传入2/3元组,实际拿到的是数值,就抛出了对应的TypeError。
修正方案
- 把两个要放入数组的计算值放在同一个列表里,作为
np.array()的第一个参数,即把[a], [b]的写法改成[a, b] - 去掉外层多余的一层方括号,避免生成不必要的额外维度
- (可选)把公共的乘法系数抽离出来,提升代码可读性
修正后的完整可运行代码:
import numpy as np arr = np.array([[3, 5, 9], [1, 2, 3]]).T Dr = 2 Dl = 3 Db = 4 delta_R = arr[0, 0] delta_L = arr[1, 0] delta_B = arr[2, 0] delta_theta = (delta_L - delta_R) / (Dr + Dl) common_coeff = 2 * np.sin(delta_theta / 2) delta_x_delta_y_arr = common_coeff * np.array([ (delta_B / delta_theta) + Db, (delta_R / delta_theta) + Dr ])
校验说明
用你给出的初始变量值计算:
delta_theta = (5-3)/(2+3) = 0.4- 公共系数
2*np.sin(0.2) ≈ 0.3973 - 第一个分量(对应Δx)计算值约为
0.3973*(9/0.4 +4) ≈ 10.53 - 第二个分量(对应Δy)计算值约为
0.3973*(3/0.4 +2) ≈ 3.77
和目标位移计算公式逻辑完全匹配。
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

