commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arne Plöse (JIRA) <j...@apache.org>
Subject [jira] [Created] (MATH-628) use only SparseIterator, on RealVectors, that implement SpareRealVectors
Date Fri, 22 Jul 2011 07:08:58 GMT
use only SparseIterator, on RealVectors, that implement SpareRealVectors 
-------------------------------------------------------------------------

                 Key: MATH-628
                 URL: https://issues.apache.org/jira/browse/MATH-628
             Project: Commons Math
          Issue Type: Improvement
    Affects Versions: 3.0
            Reporter: Arne Plöse
            Priority: Minor
         Attachments: ArrayRealVector.diff

the performance suffers badly if one tries to use SparseIterator when there is no sparse backing.
Currently there is only a check for ArrayRealvector, all other is supposed to be a SparseRealvector.
If one creates a new implementation of RealVector ... bang.

here is a performance test case:
{code}
package org.apache.commons.math.linear;

import java.util.Iterator;
import org.junit.Test;

/**
 *
 * @author aploese
 */
public class PerformanceTest {

    final static int ITER = 100;
    final static int VECTOR_SIZE = 2048;
    final static double SPARSE_FILL_STATE = 0.8;

    @Test
    public void performanceSparseVectorOpenMap() {
        System.out.println("performanceSparseVectorOpenMap");
        RealVector v = new OpenMapRealVector(VECTOR_SIZE);
        for (int i = 0; i < v.getDimension() * SPARSE_FILL_STATE; i++) {
            v.setEntry(i, i);
        }
        for (int j = 0; j < ITER; j++) {
            long t1 = System.nanoTime();
            double a = 0;
            Iterator<RealVector.Entry> it = v.sparseIterator();
            RealVector.Entry e;
            while (it.hasNext() && (e = it.next()) != null) {
                a += e.getValue();
            }
            long t2 = System.nanoTime();
            for (int i = 0; i < v.getDimension(); i++) {
                a += v.getEntry(i);
            }
            long t3 = System.nanoTime();
            System.out.println(String.format("OpenMap: %d\t%s\t| %s", j, Long.toString(t2
- t1), Long.toString(t3 - t2)));
        }
    }

    @Test
    public void performanceSparseVectorArray() {
        System.out.println("performanceSparseVectorArray");
        RealVector v = new ArrayRealVector(VECTOR_SIZE);
        for (int i = 0; i < v.getDimension() * SPARSE_FILL_STATE; i++) {
            v.setEntry(i, i);
        }
        for (int j = 0; j < ITER; j++) {
            long t1 = System.nanoTime();
            double a = 0;
            Iterator<RealVector.Entry> it = v.sparseIterator();
            RealVector.Entry e;
            while (it.hasNext() && (e = it.next()) != null) {
                a += e.getValue();
            }
            long t2 = System.nanoTime();
            for (int i = 0; i < v.getDimension(); i++) {
                a += v.getEntry(i);
            }
            long t3 = System.nanoTime();
            System.out.println(String.format("Array: %d\t%s\t| %s", j, Long.toString(t2 -
t1), Long.toString(t3 - t2)));
        }
    }
{code}

Patch will follow.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

Mime
View raw message