Ich versuche, eine Funktion zu erstellen, die blocked Matrix-Multiplikation in AllegroCL ausführt, aber ich bekomme immer Array-Index-Fehler. Ich glaube, dass die Indizes für eine Seite einer 20 x 20-Blockmatrix 0-19 sind, aber ich bin nicht sicher, wie ich das beheben soll.Blocked Matrix Multiplication
Fehler: Array-Index 20 zu groß für Dimension 20 beim Zugriff auf #. [Bedingungstyp: Typ-Fehler]
Jede Hilfe oder Richtung wird sehr geschätzt. Unten ist mein Code soweit.
(defun bmmul (A B)
(let* ((m (car (array-dimensions A)))
(n (cadr (array-dimensions A)))
(l (cadr (array-dimensions B)))
(u 0)
(C (make-array `(,m ,l) :initial-element 0)))
(loop for p from 0 to (- m n) do
(loop for i from (+ 0 1) to n do
(setf u (aref C i 0))
(loop for k from p to (- (+ p n) 1) do
(setf u (* (aref A i k) (aref B k 0))))
(setf (aref C i 0) u)))
C))
In 'LOOP' ist' bis n' inklusive. Wenn Sie "n" ausschließen möchten, verwenden Sie stattdessen 'n '. – jkiiski