2017-09-13 97 views
0

我正在學習Io語言,並想知道如何使用列表列表將多個矩陣一起使用。如何使用Io語言中的列表列表乘以兩個矩陣?

這是到目前爲止我的代碼:

mA := List clone 
mA := list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)) 
mB := List clone 
mB := list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)) 
mC := List clone 
mC := list(list(0, 0, 0), list(0, 0, 0), list(0, 0, 0)) 

i := 0 
j := 0 
k := 0 

for(i, 0, mA size, 
    for(j, 0, mB size (at(0)), 
     for(k, 0, mB size, 
      mC atPut(mC at(i) at(j), mC at(i) at(j) + mA at(i) at(k) * mB at(k) at(j)) 
     ) 
    ) 
) 

當我通過它說,有一個錯誤說「零不爲‘*’迴應」運行這段代碼。所以,我實際上在嵌套for循環內部進行乘法運算,它將進入列表超出範圍。至少這是我認爲它正在做的事情,因此是錯誤。我真的不知道還有什麼可以改變for循環。我甚至將它們更改爲2和3,因爲這是我嘗試測試的矩陣列表的大小,但得到了相同的錯誤。

回答

2

對於初學者,當索引嘗試查找不在數組中的位置時會發生此錯誤。

它設置爲大小-1這樣你就不會得到一個「零」值

的另一個問題是,在輸出端這樣看:

列表(81,55,列表( 0,0,0))

我如何固定它是通過使用臨時表,臨時的和值,並追加方法:

  for(i, 0, mA size-1, 
       tempList := List clone 
       for(j, 0, mB size (at(0))-1, 
       sum := 0 
       for(k, 0, mB size-1, 
        sum = sum + mA at(i) at(k) * mB at(k) at(j) 
        ) 
        tempList append(sum) 
       ) 
       mC atPut(i,tempList) 
       ) 

有了這個,你應該結束了,這是你的矩陣:

列表(列表(30,36,42),列表(66,81,96),列表(102,126,150))