减去两个列表,但Python中的值不会相加

减去两个列表,但Python中的值不会相加,python,pandas,list,Python,Pandas,List,我要执行以下操作:roll\u all-theta\u all。它们都是列表,每个列表包含两个值,结果应该列在我的panda.DataFrame上名为“roll”的列中。但是,当我这样做时,列“roll”的第二行值不会相加。虽然由于我在代码的其他部分执行了theta\u all操作,所以无法看到它,但我获取值的方式与获取roll\u all值的方式相同,即创建一个空的列表,然后将值附加到列表中。这是我的密码: pyr = pd.DataFrame(columns = ['pitch','yaw'

我要执行以下操作:
roll\u all-theta\u all
。它们都是
列表
,每个列表包含两个值,结果应该列在我的
panda.DataFrame
上名为“roll”的列中。但是,当我这样做时,列“roll”的第二行值不会相加。虽然由于我在代码的其他部分执行了
theta\u all
操作,所以无法看到它,但我获取值的方式与获取
roll\u all
值的方式相同,即创建一个空的
列表,然后将值附加到列表中。这是我的密码:

pyr = pd.DataFrame(columns = ['pitch','yaw','roll'])

for para in GTparas:  
    Mr = np.array([[np.cos(para[2]), -np.sin(para[2]), 0],[np.sin(para[2]), np.cos(para[2]), 0],[0, 0, 1]])
    My = np.array([[np.cos(para[1]), 0, np.sin(para[1])],[0, 1, 0],[-np.sin(para[1]), 0, np.cos(para[1])]])
    Mp = np.array([[1, 0, 0],[0, np.cos(para[0]), -np.sin(para[0])],[0, np.sin(para[0]), np.cos(para[0])]])
    M1 = np.dot(Mr,My)
    M = np.dot(M1,Mp)

    pitch = np.arctan(M[2,1]/M[2,2])
    yaw = np.arctan(M[2,0]/((((M[0,0])**2)+((M[1,0])**2))**(1/2)))
    roll = np.arctan(M[1,0]/M[0,0])
    
    roll_all = []
    roll_all.append(roll)
    print(roll_all)
    c = [a - b for a, b in zip(roll_all, theta_all)]
    #c = np.array(roll_all) - np.array(theta_all)
  
    pyr = pyr.append({'pitch':pitch,'yaw':yaw,'roll':c},ignore_index = True) # from Z-Y-X to X-Y-Z
print(pyr)
我还在列表中附加
theta\u all
的值,第二幅图像显示
roll\u all
中的值以及我打印
pyr
时得到的值

总结:

pyr = pd.DataFrame(columns = ['pitch','yaw','roll'])

for para,theta in zip(GTparas, theta_all):
    Mr = np.array([[np.cos(para[2]), -np.sin(para[2]), 0],[np.sin(para[2]), np.cos(para[2]), 0],[0, 0, 1]])
    My = np.array([[np.cos(para[1]), 0, np.sin(para[1])],[0, 1, 0],[-np.sin(para[1]), 0, np.cos(para[1])]])
    Mp = np.array([[1, 0, 0],[0, np.cos(para[0]), -np.sin(para[0])],[0, np.sin(para[0]), np.cos(para[0])]])
    M1 = np.dot(Mr,My)
    M = np.dot(M1,Mp)

    pitch = np.arctan(M[2,1]/M[2,2])
    yaw = np.arctan(M[2,0]/((((M[0,0])**2)+((M[1,0])**2))**(1/2)))
    roll = np.arctan(M[1,0]/M[0,0]) - theta
      
    pyr = pyr.append({'pitch':pitch,'yaw':yaw,'roll':roll},ignore_index = True) 

print(pyr)

但是在每个循环中清空所有的
roll\u
,因此它始终只有一个项目。没有第二项。我怀疑您希望在循环之前滚动所有=[]
,并且最后四行要被去掉,因此它不是循环的一部分。也许吧。如果我把
roll\u all=[]
放在循环之外,那么每次迭代我都会得到新值,但它们是重复的,所以当我打印
roll\u all
时,我会得到这些新值:
[-0.222445252195971454]
[-0.222445252195971454,-.53648309600616]
。而
pyr
必须保持在循环中,因为我正在获取迭代添加的
pitch
yaw
的其他值,好吧,但是你认为
roll\u all
在哪里得到2个值?我没有在代码中的任何其他地方使用
roll\u all
。如果
roll\u all=[]
被排除在循环之外,我知道对于每次迭代,每个值和过去的值都存储在该数组中。现在,如果
roll\u all=[]
在循环中(正如我所做的),那么对于每个迭代,我只添加新的值,这就是我所需要的,但问题实际上在于,当我从
roll\u all
中减去
theta\u all
时,因为如果您手动计算,“roll”的第1行应该是
-0.037589514
,您在第一次迭代中为roll生成了-0.222444。减法将执行
roll\u all[0]-theta\u all[0]
,它给出了1.31597,如它所说。它永远不会使用
theta\u all[1]
,因为永远不会有
roll\u all[1]。
。好啊