2017-09-13 79 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))