You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hama.apache.org by "Edward J. Yoon (JIRA)" <ji...@apache.org> on 2010/05/04 03:43:55 UTC
[jira] Updated: (HAMA-94) Implementation of cholesky decomposition
[ https://issues.apache.org/jira/browse/HAMA-94?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Edward J. Yoon updated HAMA-94:
-------------------------------
Fix Version/s: (was: 0.2.0)
Affects Version/s: (was: 0.2.0)
change the effect version
> Implementation of cholesky decomposition
> ----------------------------------------
>
> Key: HAMA-94
> URL: https://issues.apache.org/jira/browse/HAMA-94
> Project: Hama
> Issue Type: New Feature
> Components: examples
> Reporter: Edward J. Yoon
>
> This is my old cholesky decomposition map/reduce code..
> ----
> /**
> * Copyright 2007 The Apache Software Foundation
> *
> * Licensed to the Apache Software Foundation (ASF) under one
> * or more contributor license agreements. See the NOTICE file
> * distributed with this work for additional information
> * regarding copyright ownership. The ASF licenses this file
> * to you under the Apache License, Version 2.0 (the
> * "License"); you may not use this file except in compliance
> * with the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
> package org.apache.hama.algebra;
> import java.io.IOException;
> import org.apache.hadoop.hbase.HBaseConfiguration;
> import org.apache.hadoop.hbase.HStoreKey;
> import org.apache.hadoop.io.MapWritable;
> import org.apache.hadoop.io.Text;
> import org.apache.hadoop.mapred.JobConf;
> import org.apache.hadoop.mapred.OutputCollector;
> import org.apache.hadoop.mapred.Reporter;
> import org.apache.hama.FeatureVector;
> import org.apache.hama.Matrix;
> import org.apache.hama.TriangularMatrix;
> import org.apache.hama.mapred.MatrixMap;
> import org.apache.hama.mapred.MatrixOutputFormat;
> /**
> * Cholesky Decomposition.
> * <p>
> * For a symmetric, positive definite matrix A, the Cholesky decomposition is an
> * lower triangular matrix L so that A = L*L'.
> * </p>
> */
> public class CholeskyDecompositionMap extends MatrixMap<Text, MapWritable> {
> protected Matrix matrix_a;
> protected TriangularMatrix matrix_l;
> public static final String MATRIX_A = "cholesky.decomposition.matrix.a";
> public static final String MATRIX_L = "cholesky.decomposition.matrix.l";
> public void configure(JobConf job) {
> HBaseConfiguration conf = new HBaseConfiguration();
> Text a_name = new Text(job.get(MATRIX_A, ""));
> Text l_name = new Text(job.get(MATRIX_L, ""));
> matrix_a = new Matrix(conf, a_name);
> matrix_l = new TriangularMatrix(conf, l_name);
> }
> /**
> * @param matrix_a
> * @param matrix_l
> * @param map
> * @param jobConf
> */
> public static void initJob(String matrix_a, String matrix_l,
> Class<CholeskyDecompositionMap> map, JobConf jobConf) {
> initJob(matrix_a, map, jobConf);
> jobConf.set(MatrixOutputFormat.OUTPUT, matrix_l);
> jobConf.set(MATRIX_A, matrix_a);
> jobConf.set(MATRIX_L, matrix_l);
> }
> @Override
> public void map(HStoreKey key, MapWritable value,
> OutputCollector<Text, MapWritable> output, Reporter reporter)
> throws IOException {
> int i = Integer.parseInt(String.valueOf(key.getRow()));
> double[] ithRowOfL = new double[matrix_a.getRowDimension()];
> double[] jthRowOfL = new double[matrix_a.getRowDimension()];
> // Vector was added. I don't figure out the result. -- edward
> FeatureVector iOfV = matrix_l.getRowVector(i);
> for(int x = 0; x < iOfV.size(); x++) {
> ithRowOfL[x] = iOfV.getDimAt(x);
> }
> for (int j = i; j < value.size(); j++) {
> FeatureVector jOfV = matrix_l.getRowVector(i);
> for(int x = 0; x < jOfV.size(); x++) {
> jthRowOfL[x] = jOfV.getDimAt(x);
> }
> double sum = matrix_a.get(i, j);
> for (int k = i - 1; k >= 0; k--) {
> sum -= ithRowOfL[k] * jthRowOfL[k];
> }
> if (i == j) {
> matrix_l.setToLower(j, i, Math.sqrt(sum));
> } else {
> double c = matrix_l.get(i, i);
> matrix_l.setToLower(j, i, (sum / c));
> }
> }
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.