[ https://issues.apache.org/jira/browse/MAHOUT-300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12836167#action_12836167 ]
Robin Anil commented on MAHOUT-300: ----------------------------------- I removed hasNoElements check as per sean's and teds comment the current fix is as follows. See the maxIndex implementation. I dont know what to do in the edge case of vector being negative valued and sparse. We could return -1 or first index of 0; {code} public double maxValue() { double result = Double.NEGATIVE_INFINITY; Iterator<Element> iter = this.iterateNonZero(); while (iter.hasNext()) { Element element = iter.next(); result = Math.max(result, element.get()); } if (getNumNondefaultElements() < size()) return Math.max(result, 0.0); return result; } public int maxValueIndex() { int result = -1; double max = Double.NEGATIVE_INFINITY; Iterator<Element> iter = this.iterateNonZero(); while (iter.hasNext()) { Element element = iter.next(); double tmp = element.get(); if (tmp > max) { max = tmp; result = element.index(); } } // if the maxElement is negative and the vector is sparse then any // unfilled element(0.0) could be the maxValue hence return -1; if (getNumNondefaultElements() < size() && max < 0.0) { return -1; } return result; } {code} > Solve performance issues with Vector Implementations > ---------------------------------------------------- > > Key: MAHOUT-300 > URL: https://issues.apache.org/jira/browse/MAHOUT-300 > Project: Mahout > Issue Type: Improvement > Affects Versions: 0.3 > Reporter: Robin Anil > Fix For: 0.3 > > Attachments: MAHOUT-300.patch > > > AbstractVector operations like times > public Vector times(double x) { > Vector result = clone(); > Iterator<Element> iter = iterateNonZero(); > while (iter.hasNext()) { > Element element = iter.next(); > int index = element.index(); > result.setQuick(index, element.get() * x); > } > return result; > } > should be implemented as follows > public Vector times(double x) { > Vector result = clone(); > Iterator<Element> iter = result.iterateNonZero(); > while (iter.hasNext()) { > Element element = iter.next(); > element.set(element.get() * x); > } > return result; > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.