yes i will re-implement that from scratch because i can not find something easy in libraries to use. I already made it for Racket/Scheme+: (struct matrix-vect (v)) ;; matrix based on vector of vectors
(define (create-matrix-vect-by-function fct lin col) (matrix-vect (create-vector-2d fct lin col))) ;; return the line and column values of dimension (define (dim-matrix-vect M) (when (not (matrix-vect? M)) (error "argument is not of type matrix")) {v <+ (matrix-vect-v M)} {lin <+ (vector-length v)} {col <+ (vector-length {v[0]})} (values lin col)) (define (multiply-matrix-matrix M1 M2) {(n1 p1) <+ (dim-matrix-vect M1)} {(n2 p2) <+ (dim-matrix-vect M2)} (when {p1 ≠ n2} (error "matrix-by-vectors.* : matrix product impossible, incompatible dimensions")) {v1 <+ (matrix-vect-v M1)} {v2 <+ (matrix-vect-v M2)} (define (res i j) (for/sum ([k (in-range p1)]) {v1[i][k] * v2[k][j]})) {v <+ (create-vector-2d res n1 p2)} ;(display "v=") (display v) (newline) (matrix-vect v)) (define (vector->matrix-column v) (matrix-vect (vector-map (lambda (x) (make-vector 1 x)) v))) (define (matrix-column->vector Mc) {v <+ (matrix-vect-v Mc)} (vector-map (lambda (v2) {v2[0]}) v)) (define (multiply-matrix-vector M v) ;; args: matrix ,vector ; return vector {Mc <+ (vector->matrix-column v)} ;(display Mc) (matrix-column->vector (multiply-matrix-matrix M Mc))) there should be no difference for computation in Guile ,just that i will use GOOPS instead of struct and that it should be a guile module written in scheme+ syntax.... see it when finished.... On Wed, Oct 4, 2023 at 8:28 PM <to...@tuxteam.de> wrote: > > On Wed, Oct 04, 2023 at 05:42:10PM +0200, Damien Mattei wrote: > > thank you. i will try to find a simple example in. > > > > On Wed, Oct 4, 2023 at 1:36 PM Nala Ginrut <nalagin...@gmail.com> wrote: > > > > > > And I'd mention AIScm which bound tensorflow APIs. It needs more love. > > > > > > https://wedesoft.github.io/aiscm/ > > > > > > > > > On Wed, Oct 4, 2023, 17:12 <to...@tuxteam.de> wrote: > > >> > > >> On Wed, Oct 04, 2023 at 08:46:02AM +0200, Damien Mattei wrote: > > >> > hello, > > >> > does anyone know if it exists a basic matrix library for Guile? > > >> > just need to multiply a matrix and a vector. > > >> > > >> Perhaps this thread from guile-user [1] has something for you > > >> > > >> Cheers > > >> > > >> [1] > > >> https://lists.gnu.org/archive/html/guile-user/2018-12/threads.html#00117 > > That all said, if your case doesn't get much hairier, > it is fairly easy to navigate with Guile's arrays: > > (define (dot v1 v2) > "The dot product of v1 and v2" > (let ((sum 0)) > (array-for-each > (lambda (x1 x2) > (set! sum (+ sum (* x1 x2)))) > v1 v2) > sum)) > > (define (row m i) > "The i-th row of m, as a vector" > (make-shared-array m (lambda (j) (list i j)) (car (array-dimensions m)))) > > (define (mat* m v) > "Left multiply matrix m and vector v" > (let* ((height (cadr (array-dimensions m))) > (res (make-typed-array 'f64 0 height))) > (do ((i 0 (1+ i))) > ((>= i height)) > (array-set! res (dot (row m i) v) i)) > res)) > > > (define vec #1f64(1 2 1)) > (define mat #2f64((0.5 0.5 0) (0 0.5 0.5) (-0.5 0 0.5))) > > (mat* mat vec) > > => (1.5 1.5 0) > > CAVEAT: only tested with this one example. Input value checking > left as an... > > Cheers > -- > t >