@@ -665,34 +665,40 @@ export const createDenseMatrixClass = /* #__PURE__ */ factory(name, dependencies
665665 * @return {Iterable<{ value, index: number[] }> }
666666 */
667667 DenseMatrix . prototype [ Symbol . iterator ] = function * ( ) {
668- const maxDepth = this . _size . length - 1
668+ const size = this . _size
669+ const data = this . _data
670+ const dims = size . length
669671
670- if ( maxDepth < 0 ) {
671- return
672- }
672+ // No elements if no dimensions
673+ if ( dims === 0 ) return
673674
674- if ( maxDepth === 0 ) {
675- for ( let i = 0 ; i < this . _data . length ; i ++ ) {
676- yield ( { value : this . _data [ i ] , index : [ i ] } )
675+ // 1D matrix: yield each element with its index
676+ if ( dims === 1 ) {
677+ for ( let i = 0 ; i < size [ 0 ] ; i ++ ) {
678+ yield { value : data [ i ] , index : [ i ] }
677679 }
678680 return
679681 }
680682
681- const index = [ ]
682- const recurse = function * ( value , depth ) {
683- if ( depth < maxDepth ) {
684- for ( let i = 0 ; i < value . length ; i ++ ) {
685- index [ depth ] = i
686- yield * recurse ( value [ i ] , depth + 1 )
687- }
688- } else {
689- for ( let i = 0 ; i < value . length ; i ++ ) {
690- index [ depth ] = i
691- yield ( { value : value [ i ] , index : index . slice ( ) } )
692- }
683+ // Multi-dimensional matrix: iterate over all elements
684+ const index = Array ( dims ) . fill ( 0 )
685+ const totalElements = size . reduce ( ( a , b ) => a * b , 1 )
686+
687+ for ( let count = 0 ; count < totalElements ; count ++ ) {
688+ // Traverse to the current element using indices
689+ let current = data
690+ for ( let d = 0 ; d < dims - 1 ; d ++ ) {
691+ current = current [ index [ d ] ]
692+ }
693+ yield { value : current [ index [ dims - 1 ] ] , index : index . slice ( ) }
694+
695+ // Increment indices for next element
696+ for ( let d = dims - 1 ; d >= 0 ; d -- ) {
697+ index [ d ] ++
698+ if ( index [ d ] < size [ d ] ) break
699+ index [ d ] = 0
693700 }
694701 }
695- yield * recurse ( this . _data , 0 )
696702 }
697703
698704 /**
0 commit comments