2016-10-02 6 views
-1

Я новичок в работе с SparseVector. Я хочу вычесть два SparseVectors и вернуть результат как SparseVector.Как вычесть два разреза?

В чем разница между Vector и SparseVector?

Я попытался начать с определения функции, которая принимает два SparseVector, но не получила ничего, что помогло мне!

import java.awt.Point; 
import java.util.HashMap; 
import cern.colt.list.DoubleArrayList; 
import cern.colt.matrix.impl.SparseDoubleMatrix1D; 

public class SparseVector extends SparseDoubleMatrix1D { 
    public SparseVector(int size) { 
     super(size); 
    } 

    public SparseVector(double[] values) { 
     super(values); 
    } 

    public SparseVector subtract(SparseVector v1, SparseVector v2) { 
     // TODO: How to implement it? 
    } 
} 
+0

могли бы вы опубликовать текущую реализацию 'SparseVector' класса? Не могли бы вы указать, что такое ожидаемая семантика метода 'subtract()'? –

+0

Я определил метод вычитания, чтобы заставить его вызвать его в другом классе, который примет два разреженных вектора, чтобы вернуть результат в один разреженный вектор – user1

+0

Должен ли метод быть 'static'? –

ответ

0

Кажется, что нет необходимости создавать пользовательскую реализацию. Пожалуйста, рассмотрите следующий пример:

import cern.colt.matrix.impl.SparseDoubleMatrix1D; 
import cern.jet.math.Functions; 

// … 

final SparseDoubleMatrix1D aMatrix = new SparseDoubleMatrix1D(new double[] { 3.0 }); 
final SparseDoubleMatrix1D bMatrix = new SparseDoubleMatrix1D(new double[] { 1.0 }); 
aMatrix.assign(bMatrix, Functions.minus); 
// aMatrix is the result. 
System.out.println(aMatrix); 

Обратитесь к cern.jet.math.Functions class.

реализация пользовательских

Обратите внимание, что статический метод может быть излишним.

import cern.colt.matrix.impl.SparseDoubleMatrix1D; 
import cern.jet.math.Functions; 

final class SparseVector extends SparseDoubleMatrix1D { 
    public SparseVector(int size) { 
     super(size); 
    } 

    public SparseVector(double[] values) { 
     super(values); 
    } 

    /** 
    * Subtract otherVector from this vector. 
    * The result is stored in this vector. 
    * @param otherVector other vector 
    * @return this vector 
    */ 
    public SparseVector subtract(SparseVector otherVector) { 
     assign(otherVector, Functions.minus); 
     return this; 
    } 

    public static SparseVector subtract(SparseVector x, SparseVector y) { 
     final SparseVector result = new SparseVector(x.toArray()); 
     result.subtract(y); 
     return result; 
    } 
} 

Пример:

final SparseVector aVector = new SparseVector(new double[] { 3.0 }); 
final SparseVector bVector = new SparseVector(new double[] { 1.0 }); 

aVector.subtract(bVector); 

// aVector is the result. 
System.out.println(aVector); 
+0

спасибо, но мне это нужно в методе, так как я сказал, что у меня есть два разреженных вектора в другом классе, и мне нужно их вычесть – user1

+0

@ user1, ладно. См. Обновление. –