[ https://issues.apache.org/jira/browse/MAHOUT-790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13088634#comment-13088634 ]
Sean Owen commented on MAHOUT-790: ---------------------------------- On clone() vs like(): there are two logical operations we might want to support here. There's an operation that gives a separate, identical copy with all the same values. There's also an operation that gives a separate, identical copy with no data or values. The first should certainly be called clone(), since that's what it is, in Java. Lance, is your objection that we simply should not have the first operation? or that you don't want to use clone() per se for some reason? I don't see that either of these two has an easier time deciding what class to return, or that one or the other must or must not be implemented in subclasses. These are like any other OO method. I can imagine both are useful, and so would support keeping both. If someone has a good argument that one or the other really isn't used, that's good too. And certainly if we're finding they're implemented incorrectly, and I did find several instances of that in the past, we should fix it. > Redundancy in Matrix API, view or get? > -------------------------------------- > > Key: MAHOUT-790 > URL: https://issues.apache.org/jira/browse/MAHOUT-790 > Project: Mahout > Issue Type: Improvement > Affects Versions: 0.5 > Reporter: Ted Dunning > Fix For: 0.6 > > Attachments: MAHOUT-790.patch > > > We have a bunch of redundant methods in our matrix interface. These include > things that return views of parts of the matrix: > {code} > Matrix viewPart(int[] offset, int[] size); > Matrix viewPart(int rowOffset, int rowsRequested, int columnOffset, int > columnsRequested); > Vector viewRow(int row); > Vector viewColumn(int column); > {code} > and things that do the same but call refer to getting stuff > {code} > Vector getColumn(int column); > Vector getRow(int row); > double getQuick(int row, int column); > int[] getNumNondefaultElements(); > Map<String, Integer> getColumnLabelBindings(); > Map<String, Integer> getRowLabelBindings(); > double get(String rowLabel, String columnLabel); > {code} > To my mind, get implies a get-by-value whereas view implies get-by-reference. > As such, I would suggest that getColumn and getRow should disappear. On the > other hand, getQuick and get are both correctly named. > This raises the question of what getNumNondefaultElements really does. I > certainly can't tell just from the signature. Is it too confusing to keep? > Additionally, what do people think that getColumnLabelBindings and > getRowLabelBindings return? A mutable map? Or an immutable one? > Under the covers, viewRow and viewColumn (and the upcoming viewDiagonal) have > default implementations that use MatrixVectorView, but AbstractMatrix doesn't > have an implementation for getRow and getColumn. > In sum, I suggest that: > - getRow and getColumn go away > - the fancy fast implementations fo getRow and getColumn that exist be > migrated to be over-rides of viewRow and viewColumn > - there be a constructor for AbstractMatrix that sets the internal size > things correctly. > - that the internal cardinality array in AbstractMatrix goes away to be > replaced by two integers. > - viewDiagonal() and viewDiagonal(length) and viewDiagonal(row, column) and > viewDiagonal(int row, column, length) be added. > I will produce a patch shortly. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira