如何使用 Io 语言中的列表列表将两个矩阵相乘?
How to multiply two matrices using a list of lists in Io language?
我正在学习 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))
)
)
)
当我 运行 这段代码通过时它说有一个错误说 "nil does not respond to '*'"。所以我实际上在嵌套的 for 循环中乘法,它进入了超出范围的列表。至少那是我认为它正在做的,因此是错误的。我不太确定还可以将 for 循环更改为什么。我什至将它们更改为 2 和 3,因为这是我要测试的矩阵列表的大小,但出现了同样的错误。
对于初学者来说,当索引试图查找不在数组中的位置时会发生此错误。
将其设置为 1 号,这样您就不会收到 'nil' 值
另一个问题是输出最终看起来像这样:
列表(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))
我正在学习 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))
)
)
)
当我 运行 这段代码通过时它说有一个错误说 "nil does not respond to '*'"。所以我实际上在嵌套的 for 循环中乘法,它进入了超出范围的列表。至少那是我认为它正在做的,因此是错误的。我不太确定还可以将 for 循环更改为什么。我什至将它们更改为 2 和 3,因为这是我要测试的矩阵列表的大小,但出现了同样的错误。
对于初学者来说,当索引试图查找不在数组中的位置时会发生此错误。
将其设置为 1 号,这样您就不会收到 'nil' 值
另一个问题是输出最终看起来像这样:
列表(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))