Return-Path: Delivered-To: apmail-lucene-mahout-commits-archive@locus.apache.org Received: (qmail 92584 invoked from network); 12 Apr 2008 16:44:44 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 12 Apr 2008 16:44:44 -0000 Received: (qmail 48130 invoked by uid 500); 12 Apr 2008 16:44:45 -0000 Delivered-To: apmail-lucene-mahout-commits-archive@lucene.apache.org Received: (qmail 48096 invoked by uid 500); 12 Apr 2008 16:44:44 -0000 Mailing-List: contact mahout-commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: mahout-dev@lucene.apache.org Delivered-To: mailing list mahout-commits@lucene.apache.org Received: (qmail 48087 invoked by uid 99); 12 Apr 2008 16:44:44 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 12 Apr 2008 09:44:44 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 12 Apr 2008 16:44:10 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A6C421A9832; Sat, 12 Apr 2008 09:44:22 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r647469 - in /lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix: AbstractVector.java DenseVector.java SparseVector.java Vector.java VectorView.java Date: Sat, 12 Apr 2008 16:44:20 -0000 To: mahout-commits@lucene.apache.org From: kalle@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080412164422.A6C421A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kalle Date: Sat Apr 12 09:44:14 2008 New Revision: 647469 URL: http://svn.apache.org/viewvc?rev=647469&view=rev Log: MAHOUT-34, Vector implements Iterable Modified: lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/AbstractVector.java lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/DenseVector.java lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/SparseVector.java lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/Vector.java lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/VectorView.java Modified: lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/AbstractVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/AbstractVector.java?rev=647469&r1=647468&r2=647469&view=diff ============================================================================== --- lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/AbstractVector.java (original) +++ lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/AbstractVector.java Sat Apr 12 09:44:14 2008 @@ -106,6 +106,30 @@ public abstract Vector viewPart(int offset, int length) throws CardinalityException, IndexException; + + /** + * Returns an iterator for traversing the Vector, but not in + * any particular order. The actual implementations may make + * some guarantees about the order in which the vector is + * traversed. Otherwise, the traversal order is undefined. + * @see java.lang.Iterable#iterator() + */ + public abstract java.util.Iterator iterator(); + + /* + * (non-Javadoc) + * @see org.apache.mahout.matrix.Vector#getElement + */ + //@Override JDK 1.6 + public Vector.Element getElement(int index) { return new Element(index); } + + public class Element implements Vector.Element { + private int ind; + public Element(int ind) { this.ind=ind; } + public double get() { return getQuick(ind); } + public int index() { return ind; } + public void set(double value) { setQuick(ind,value); } + } /* * (non-Javadoc) * Modified: lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/DenseVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/DenseVector.java?rev=647469&r1=647468&r2=647469&view=diff ============================================================================== --- lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/DenseVector.java (original) +++ lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/DenseVector.java Sat Apr 12 09:44:14 2008 @@ -131,4 +131,22 @@ else return other.haveSharedCells(this); } + + /** + * Returns an iterator that traverses this Vector from 0 + * to cardinality-1, in that order. + * @see java.lang.Iterable#iterator + */ + @Override + public java.util.Iterator iterator() { + return new Iterator(); + } + + private class Iterator implements java.util.Iterator { + private int ind; + public Iterator() { ind=0; } + public boolean hasNext() { return ind iterator() { + return new Iterator(); + } + + private class Iterator implements java.util.Iterator { + private java.util.Iterator> it; + public Iterator() { it=values.entrySet().iterator(); } + public boolean hasNext() { return it.hasNext(); } + public Element next() { return new Element(it.next().getKey()); } + public void remove() { throw new UnsupportedOperationException(); } + } } Modified: lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/Vector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/Vector.java?rev=647469&r1=647468&r2=647469&view=diff ============================================================================== --- lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/Vector.java (original) +++ lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/Vector.java Sat Apr 12 09:44:14 2008 @@ -23,7 +23,7 @@ * The basic interface including numerous convenience functions * */ -public interface Vector { +public interface Vector extends Iterable{ /** * Return a formatted WritableComparable suitable for output @@ -93,6 +93,29 @@ Vector copy(); /** + * Return an object of Vector.Element representing an element + * of this Vector. Useful when designing new iterator types. + * @param index Index of the Vector.Element required + * @return The Vector.Element Object + */ + Element getElement(int index); + + public interface Element { + /** + * @return the value of this vector element. + */ + double get(); + /** + * @return the index of this vector element. + */ + int index(); + /** + * @param value Set the current element to value. + */ + void set(double value); + } + + /** * Return a new matrix containing the values of the recipient divided by the * argument * @@ -277,4 +300,5 @@ // DoubleDoubleFunction map); // NewVector assign(Vector y, DoubleDoubleFunction function, IntArrayList // nonZeroIndexes); + } Modified: lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/VectorView.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/VectorView.java?rev=647469&r1=647468&r2=647469&view=diff ============================================================================== --- lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/VectorView.java (original) +++ lucene/mahout/trunk/src/main/java/org/apache/mahout/matrix/VectorView.java Sat Apr 12 09:44:14 2008 @@ -19,6 +19,8 @@ import org.apache.hadoop.io.Text; import org.apache.hadoop.io.WritableComparable; +import java.util.Iterator; + /** * Implements subset view of a Vector */ @@ -113,5 +115,34 @@ return other == this || vector.haveSharedCells(other); else return other.haveSharedCells(vector); + } + + /* + * (Non-Javadoc) + * Returns true if index is a valid index in the underlying Vector + */ + private boolean isInView(int index) { + return index>=offset && index iterator() { return new ViewIterator(); } + public class ViewIterator implements Iterator { + Iterator it; + Vector.Element el; + public ViewIterator() { + it=vector.iterator(); + while(it.hasNext()) + { el=it.next(); + if(isInView(el.index())) return; + } + el=null; // No element was found + } + public Vector.Element next() { return el; } + public boolean hasNext() { return el!=null; } + /** @throws UnsupportedOperationException all the time. method not + * implemented. + */ + public void remove() { throw new UnsupportedOperationException(); } } }