ValueError: setting an array element with a sequence.
运行时一直出现这个ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (3, 1) + inhomogeneous part.,该如何解决(备注掉最后一行时,又不报错了)
import numpy as np
import matplotlib.pyplot as plt
# 显示中文和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 已知的是目标的静态RCS
# (x_0,y_0)为飞机航迹的圆心坐标,V为飞机目标的巡航速度,r为航迹半径,h为巡航高度
x_0 = 0
y_0 = 0
v = 300 #单位为 m/s
h = 0 #单位为 m
r = 300 #单位为 m
# a 表示偏航角,b 表示仰俯角 ,c 表示滚转角
a = 0
b = 0
c = 0
# 目标飞行一周所需时间
t_all = 2 * np.pi * r / v #单位为 s
# t为需要计算的时刻
# 返回的雷达(原点)在机体变换到坐标系中的坐标轴,和雷达到目标的距离
def angle(t):
# x_T,y_T,z_T 为飞机目标在雷达坐标系中的位置
x_T = x_0 + r * np.cos(v * t / r)
y_T = y_0 + r * np.sin(v * t / r)
z_T = h
# r_t 为目标到目标的实时距离
r_t = np.sqrt(np.power(x_T,2) + np.power(y_T,2) + np.power(z_T,2))
axis_T = np.array([[-x_T],
[-y_T],
[-z_T]])
# a 表示偏航角,b 表示仰俯角 ,c 表示滚转角
a = v * t / r #假设偏航角是与y轴的夹角,其就等于转动过的角度
# 滚转角 转换矩阵
c_t = np.array([[1,0,0],
[0, np.cos(c),np.sin(c)],
[0,-np.sin(c),np.cos(c)]])
# 俯仰角 转换矩阵
b_t = np.array([[np.cos(b), 0, -np.sin(b)],
[0, 1, 0],
[np.sin(b), 0, np.cos(b)]])
# 偏航角 转换矩阵
a_t = np.array([[np.cos(a), np.sin(a), 0],
[-np.sin(a), np.cos(a), 0],
[0, 0, 1]])
# axis_t #转换到机体坐标系后的雷达的坐标
axis_t = np.dot(np.dot(np.dot(c_t, b_t), a_t), axis_T)
x_t = axis_t[0,0]
y_t = axis_t[1,0]
z_t = axis_t[2,0]
# 计算时变得姿态角
fangwei = np.arctan(y_t / x_t) #np.arctan()输入正切值,输出对应弧度
fuyang = np.arctan(z_t / np.sqrt(np.power(x_t,2)+np.power(y_t,2)+np.power(z_t,2)))
# 将弧度转换为角度
fangwei_t = fangwei * (180 / np.pi)
fuyang_t = fuyang * (180 / np.pi)
return fangwei_t,fuyang_t,r_t
# 绘制方位角变化曲线
x = np.arange(0,t_all,5)
fangweijiao,fuyangjiao,juli = angle(x)
在你的代码中,我注意到在函数angle()的最后一行有三个变量被返回,而不是一个数组。如果你想把这三个变量作为一个数组返回,你可以使用numpy.stack()函数来把它们沿着一个新的维度堆叠在一起。修改最后一行代码为:
return np.stack((fangweijiao, fuyangjiao, juli), axis=1)
这将把fangweijiao、fuyangjiao和juli这三个变量沿着新的维度(axis=1)堆叠成一个数组,并返回该数组。