incubator-hama-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Edward J. Yoon (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HAMA-66) The determinant of a matrix
Date Tue, 12 May 2009 10:11:45 GMT

    [ https://issues.apache.org/jira/browse/HAMA-66?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12708387#action_12708387
] 

Edward J. Yoon commented on HAMA-66:
------------------------------------

http://www.math.tu-berlin.de/EuroComb05/Talks/Poster/p12-Teimoori_Faal.ppt

If we adapt this idea to map/reduce, determinants can be processed sequentially. 

Each map task computes the determinant of 2 by 2 matrix, reduce task writes all of its output.

This Map/Reduce job will run order times, then we can get a determinant of original matrix.


> The determinant of a matrix
> ---------------------------
>
>                 Key: HAMA-66
>                 URL: https://issues.apache.org/jira/browse/HAMA-66
>             Project: Hama
>          Issue Type: New Feature
>          Components: implementation
>            Reporter: Edward J. Yoon
>
> This is my old map/reduce code to get the determinant of a matrix.
> Map: 
>   public void map(HStoreKey key, MapWritable value,
>       OutputCollector<Text, MapWritable> output, Reporter reporter)
>       throws IOException {
>     int r = Integer.parseInt(String.valueOf(key.getRow()));
>     checkObj.set(r, 0,  0.0);
>     double d = matrix_a.get(r, 0) * Math.pow(-1.0, r) * minor(r, 1);
>     checkObj.set(r, 0, 1.0);
>     MapWritable val = new MapWritable();
>     val.put(Constants.COLUMN, getBytesWritable(d));
>     output.collect(Constants.DETERMINANT, val);
>   }
>   private double minor(int processRow, int processColumn)
>       throws IOException {
>     double result = 0.0;
>     int i = 0;
>     if ((row - processColumn) == 0) {
>       return 1.0;
>     }
>     for (int r = 0; r < row; r++) {
>       double trans = checkObj.get(r, 0);
>       if (trans != 0.0) {
>         checkObj.set(r, 0, 0.0);
>         result += matrix_a.get(r, processColumn) * Math.pow(-1.0, i)
>             * minor(r, processColumn + 1);
>         checkObj.set(r, 0, 1.0);
>         i++;
>       }
>     }
>     return result;
>   }
> Reduce:
>   public void reduce(Text key, Iterator<MapWritable> values,
>       OutputCollector<Text, MapWritable> output, Reporter reporter)
>       throws IOException {
>     double sum = 0;
>     while (values.hasNext()) {
>       sum += getDouble(values.next().get(Constants.COLUMN));
>     }
>     MapWritable value = new MapWritable();
>     value.put(Constants.COLUMN, getBytesWritable(sum));
>     output.collect(key, value);
>   }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message