[racket] How to iterate through the arrays in a matrix?
Hi,
Using high level constructs:
#lang racket
(require math/matrix)
(define (centering-matrix n)
(define 1/n (/ 1 n))
(define -1/n (- 1/n))
(define 1-1/n (- 1 1/n))
(build-matrix n n (λ (i j) (if (= i j) 1-1/n -1/n))))
(define (scatter-matrix X)
(define n (matrix-num-cols X))
(define C (centering-matrix n))
(define XT (matrix-transpose X))
(matrix* X C XT))
(scatter-matrix (matrix [[1 2 3] [4 5 6]]))
2014-11-28 23:22 GMT+01:00 Animesh Pandey <animeshpandey.etno at gmail.com>:
> Hi,
> This explanation might be of some help.
>
> What I am trying to find is the Scatter Matrix of a given matrix
> "final-data".
> Since "final-data" is a list of lists and not a matrix I wrote the following
> functions:
>
> ;; l is a list
> ;; MAT-COL is 4
> (define (sub-vec l)
> (matrix-
> ;; l is converted to a matrix for matrix subtraction
> (list->matrix 1 MAT-COL l)
> ;; MEAN is a constant array/matrix
> (list->matrix 1 MAT-COL MEAN)))
>
> ;; computes the product of the result of "sub-vec" and its transpose which
> is a
> ;; (MAT-COL X MAT-COL) dimension matrix for each iteration and then sums up
> ;; all the matrices in to one which is the scatter matrix
> (define scatter-matrix
> (apply matrix+ (map
> (λ(l)
> (matrix* (matrix-transpose (sub-vec l)) (sub-vec l)))
> final-data)))
>
> I am sorry I really don't have any examples for this.
>
>
> On Fri, Nov 28, 2014 at 5:10 PM, Daniel Prager <daniel.a.prager at gmail.com>
> wrote:
>>
>> Could you please give a few examples, with inputs and desire outputs?
>>
>> Dan
>>
>> On Nov 29, 2014 8:57 AM, "Animesh Pandey" <animeshpandey.etno at gmail.com>
>> wrote:
>>>
>>> (map
>>> (λ(i)
>>> (matrix-
>>> (list->matrix 1 4 i)
>>> (list->matrix 1 4 arr)))
>>> final-data)
>>>
>>> I used this method where final-data is a list of lists and I iterate
>>> through each list, convert it to a matrix and then subtract a pre-defined
>>> constant list to it. What I really need is a way to iterate through a matrix
>>> and not a list of lists as I have do to a lot of matrix operations.
>>>
>>>
>>> On Fri, Nov 28, 2014 at 4:41 PM, Animesh Pandey
>>> <animeshpandey.etno at gmail.com> wrote:
>>>>
>>>> Hi,
>>>> I have a 80 X 4 matrix. I have iterate through each row and subtract
>>>> each row with another array at each iteration. At first I thought to convert
>>>> all array to list and do all the operations and then again convert the final
>>>> list if lists to a matrix. But I somehow think that is not a suited way. I
>>>> tried using "for*/matrix" but could not get it right. Could any one give an
>>>> example on how to iterate a matrix (array for arrays)?
>>>>
>>>> My matrix looks like this:
>>>> > (list*->matrix final-data)
>>>> (array
>>>> #[#[5.1 3.5 1.4 0.2]
>>>> #[4.9 3.0 1.4 0.2]
>>>> #[4.7 3.2 1.3 0.2]
>>>> #[4.6 3.1 1.5 0.2]
>>>> #[5.0 3.6 1.4 0.2]
>>>> #[5.4 3.9 1.7 0.4]
>>>> #[4.6 3.4 1.4 0.3]
>>>> #[5.0 3.4 1.5 0.2]
>>>> #[4.4 2.9 1.4 0.2]
>>>> #[4.9 3.1 1.5 0.1]
>>>> ...........
>>>>
>>>> Thanks!
>>>
>>>
>>>
>>> ____________________
>>> Racket Users list:
>>> http://lists.racket-lang.org/users
>>>
>
>
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
>
--
--
Jens Axel Søgaard