out.writeInt(mat.getRowCount()); out.writeInt(mat.getColumnCount()); int[] rowIndices = mat.rowIndices(); out.writeInt(rowIndices.length); for (int row : rowIndices) {
@Override public double[][] toArray() { int[] rowIndices = rowIndices(); double[][] dim = new double[getRowCount()][getColumnCount()]; for (int row : rowIndices) { DoubleVector rowVector = getRowVector(row); Iterator<DoubleVectorElement> iterateNonZero = rowVector.iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); dim[row][next.getIndex()] = next.getValue(); } } return dim; }
@Override public DoubleVector multiplyVectorColumn(DoubleVector v) { DoubleVector result = new SparseDoubleVector(this.getColumnCount()); if (v.isSparse()) { Iterator<DoubleVectorElement> vectorNonZero = v.iterateNonZero(); while (vectorNonZero.hasNext()) { DoubleVectorElement featureElement = vectorNonZero.next(); DoubleVector rowVector = getRowVector(featureElement.getIndex()); Iterator<DoubleVectorElement> rowNonZero = rowVector.iterateNonZero(); while (rowNonZero.hasNext()) { DoubleVectorElement outcomeElement = rowNonZero.next(); result.set( outcomeElement.getIndex(), result.get(outcomeElement.getIndex()) + (outcomeElement.getValue() * featureElement.getValue())); } } } else { for (int row : rowIndices()) { Iterator<DoubleVectorElement> iterateNonZero = matrix.get(row) .iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement e = iterateNonZero.next(); result.set(e.getIndex(), (e.getValue() * v.get(row)) + result.get(e.getIndex())); } } } return result; }