2016-05-31 139 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