2016-05-31 137 views
0

我想创建一个矩阵与q是3在这种情况下,q = 10或每行我想这三个值是三角函数的结果函数在我的代码中描述如下。试图在python中建立一个循环的矩阵

问题是我不断收到一个错误,指出列表索引超出范围。我不明白为什么它说这是超出范围。在我眼中,我的循环似乎是正确的。任何人都可以告诉我我俯瞰/做错了什么?

# Input az matrix 
    az = [142.243258152,116.039625836,80.1585056414,139.614063776,87.2093336287,94.1433825229,35.5599100744,11.0328982848,177.717968103,19.0072693362] 

# Construct frame of X matrix 
X = [[0 for x in range(10)] for y in range(3)] 

# Use az matrix to complete X matrix 
f=0 
for bear in az: 
    X[f][0] = (M.cos(bear))**2 
    X[f][1] = 2*M.cos(bear)*M.sin(bear) 
    X[f][2] = (M.sin(bear))**2 
    f=f+1 

print X 
+0

你'az'阵列有10个元素,而不是8 –

+0

漂亮检查,但即使我把正确数量的行出现同样的错误 – noggy

回答

0

OP的输入列表az有10个元素,而不是8作为应该与基体的范围应被交换。

此外,sincos功能通常以弧度作为输入,而az似乎包含以度为单位的角度。

这个片断:

from math import radians, cos, sin 

# Input az matrix 
az = [142.243258152, 116.039625836, 80.1585056414, 139.614063776, 87.2093336287, 94.1433825229, 35.5599100744, 11.0328982848, 177.717968103, 19.0072693362] 

# Construct frame of X matrix 
X = [[0 for x in range(3)] for y in range(10)] 

# Use az matrix to complete X matrix 
f=0 
for bear in az: 
    r = radians(bear) 
    c = cos(r) 
    s = sin(r) 
    X[f][0] = c**2 
    X[f][1] = 2*c*s 
    X[f][2] = s**2 
    f=f+1 

print(X) 

给出了这样的输出:

[[0.6250760791021176, -0.9682065367191874, 0.37492392089788235], [0.19271454590900655, -0.7888615840667916, 0.8072854540909934], [0.029214706063653385, 0.3368157182393228, 0.9707852939363467], [0.5801828858777331, -0.9870576575100736, 0.41981711412226685], [0.0023704299165554724, 0.09725864441922212, 0.9976295700834447], [0.0052204459914281754, -0.14412762309951216, 0.9947795540085718], [0.6617950612456389, 0.9461973539521655, 0.33820493875436103], [0.9633765287676627, 0.3756710933102597, 0.0366234712323373], [0.9984144917844932, -0.07957372378380607, 0.001585508215506806], [0.893927252777247, 0.615861411421014, 0.10607274722275291]] 
+0

我试着在我的代码中使用你的代码片段,但我仍然收到相同的'索引超出范围'的错误。编辑:这实际上是正确的,谢谢你的帮助! – noggy