2017-09-13 9 views
0

J'apprends le langage Io et je voudrais savoir comment combiner plusieurs matrices en utilisant des listes de listes.Comment multiplier deux matrices en utilisant une liste de listes en langage Io?

Voici mon code à ce jour:

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)) 
     ) 
    ) 
) 

Quand je lance ce code à travers elle dit qu'il ya une erreur « nul ne répond pas à« * ». Donc, là où je me multiplie à l'intérieur des boucles for imbriquées, ça va dans la liste hors limites. Au moins c'est ce que je pense qu'il fait, donc l'erreur. Je ne suis pas vraiment sûr de quoi d'autre pour changer les boucles for à. Je les ai même changés en 2 et 3 puisque c'est la taille des listes de matrices que j'essaye de tester, mais j'ai eu la même erreur.

Répondre

2

Pour les démarreurs, cette erreur se produit lorsque l'index tente de rechercher une position qui ne se trouve pas dans le tableau.

Set à la taille 1 de sorte que vous ne recevez pas une valeur « néant »

L'autre problème est que la sortie finit par ressembler à ceci:

liste

(81, 55, liste (0, 0, 0))

Comment je l'ai fixé était à l'aide d'une liste temporaire, une valeur de somme temporaire, et la méthode append:

  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) 
       ) 

avec cela, vous devriez finir avec ce que votre matrice:

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