Yeah it's a bug.
The section is intended to be an optimization. But it ought to go
something like this. This is the best structure I could find for a
similar problem in AbstractSimilarity.
I'll commit this if there are no better fixes and tests do pass.
Iterator<Element> myIter = iterateNonZero();
Iterator<Element> otherIter = x.iterateNonZero();
if (!myIter.hasNext() || !otherIter.hasNext()) {
return 0.0;
}
Element myCurrent = myIter.next();
Element otherCurrent = otherIter.next();
double result = 0.0;
while (true) {
int myIndex = myCurrent.index();
int otherIndex = otherCurrent.index();
if (myIndex == otherIndex) {
result += myCurrent.get() * otherCurrent.get();
}
if (myIndex <= otherIndex) {
if (!myIter.hasNext()) {
break;
}
myCurrent = myIter.next();
}
if (myIndex >= otherIndex) {
if (!otherIter.hasNext()) {
break;
}
otherCurrent = otherIter.next();
}
}
On Fri, Jun 11, 2010 at 10:13 AM, Robin Anil <[email protected]> wrote:
> This is possibly a bug. Let me check the code.
>
> On Fri, Jun 11, 2010 at 2:31 PM, zhao zhendong <[email protected]>wrote:
>
>> Hi,
>>
>> One strange thing, SequentialAccessSparseVector.dot() seems does NOT work
>> correctly. When I change the Vector w = new
>> RandomAccessSparseVector(Integer.MAX_VALUE, 12); Then the code works well.
>>
>> I check the source code of SequentialAccessSparseVector.dot(), it checks
>> the
>> index of two Vectors(if both of them are instance of
>> SequentialAccessSparseVector), once they mis-match, it will return 0.0.
>>
>> *Why do we need such constrain?
>> *
>> In this case, what's the best way to get dot product between two
>> mis-matched
>> SequentialAccessSparseVector instances?
>>
>> Code:
>> Vector w = new SequentialAccessSparseVector(Integer.MAX_VALUE, 12);
>> w.set(1, 0.4);
>> w.set(2, 0.4);
>> w.set(3, -0.666666667);
>>
>> Vector v = new SequentialAccessSparseVector(Integer.MAX_VALUE, 12);
>> v.set(3, 1);
>> System.out.println(datastore.getFeatureRow(2).dot(w));
>>
>> The result is 0.0 (should be -0.666666667).
>>
>>
>> --
>> -------------------------------------------------------------
>>
>> Zhen-Dong Zhao (Maxim)
>>
>> <><<><><><><><><><>><><><><><>>>>>>
>>
>> Department of Computer Science
>> School of Computing
>> National University of Singapore
>>
>> >>>>>>><><><><><><><><<><>><><<<<<<
>>
>