Skip to content
Snippets Groups Projects
Commit 90019aae authored by fefe's avatar fefe
Browse files

Transposed functions tested

parent 4a6a79cc
No related branches found
No related tags found
No related merge requests found
package ch.hepia.numeric;
import java.util.List;
import java.util.ArrayList;
import java.util.function.DoubleFunction;
import java.util.function.Function;
public class Transposed{
private List<Double> vecT;
......@@ -9,6 +11,16 @@ public class Transposed{
this.vecT = new ArrayList<>();
};
private Transposed(Double... elements) {
List<Double> vec = new ArrayList<>();
for (double elem : elements){vec.add(elem);}
this.vecT = vec;
}
public Transposed(List<Double> elements){
this.vecT = elements;
}
public Transposed(Vector That){
this.vecT = new ArrayList<>();
for (double elem : That.getValues()){vecT.add(elem);}
......@@ -18,6 +30,10 @@ public class Transposed{
return this.vecT;
}
void set(int i, double value) {
this.vecT.set(i, value);
}
public int len() {
return this.getValues().size();
}
......@@ -35,7 +51,32 @@ public class Transposed{
}
return res;
//throw new UnsupportedOperationException("This feature isn't implemented yet");
};
}
public Transposed add(Transposed that) {
List<Double> newVec = new ArrayList<>();
for(int i=0; i < this.len();i++){
newVec.add(this.get(i)+that.get(i));
}
return new Transposed(newVec);
}
public static Transposed zeros(int nb) {
List<Double> newVec = new ArrayList<>();
for (int i = 0; i < nb ; i++){
newVec.add(0.0);
}
return new Transposed(newVec);
}
public static Transposed sum(List<Transposed> vs) {
Transposed totalVec = Transposed.zeros(vs.get(0).len());
for (Transposed vec : vs){
totalVec = totalVec.add(vec);
}
return totalVec;
}
public Transposed sub(Transposed That){
Transposed resT = new Transposed();
Integer count = 0;
......@@ -47,7 +88,111 @@ public class Transposed{
//throw new UnsupportedOperationException("This feature isn't implemented yet");
};
@Override
public Transposed mul(double m) {
List<Double> newVec = new ArrayList<>();
for (int i=0; i<this.len();i++){
newVec.add(this.get(i)*m);
}
return new Transposed(newVec);
}
public static Transposed of(Double... elements) {
return new Transposed(elements);
}
public static Transposed of(List<Double> elements) {
return new Transposed(elements);
}
public static Transposed empty() {
return new Transposed();
}
public double norm() {
double sum = 0.0;
for (int i=0; i<this.len();i++){
sum += Math.pow(this.get(i),2.0);
}
return Math.sqrt(sum);
}
public static double norms(List<Transposed> vs) {
return Transposed.sum(vs).norm();
}
public Transposed map(DoubleFunction<Double> f) {
List<Double> accVec = this.getValues();
List<Double> newVec = new ArrayList<>();
for (Double val : accVec){
newVec.add(f.apply(val));
}
return new Transposed(newVec);
}
public static Transposed ones(int nb) {
List<Double> newVec = new ArrayList<>();
for (int i = 0; i < nb ; i++){
newVec.add(1.0);
}
return new Transposed(newVec);
}
public static Transposed fill(int nb, double value) {
List<Double> newVec = new ArrayList<>();
for (int i = 0; i < nb ; i++){
newVec.add(value);
}
return new Transposed(newVec);
}
public static Transposed tabulate(int nb, Function<Integer, Double> f) {
List<Double> newVec = new ArrayList<>();
for (int i=0; i < nb; i++){
newVec.add(f.apply(i));
}
return new Transposed(newVec);
}
public Transposed concat(Transposed that) {
List<Double> newVec = this.getValues();
newVec.addAll(that.getValues());
return new Transposed(newVec);
}
public Transposed sliceFrom(int i) {
List<Double> newVec = new ArrayList<>();
for (int j=0; j < this.len();j++){
if (j >= i){
newVec.add(this.get(j));
}
}
return new Transposed(newVec);
}
public Transposed sliceTo(int i) {
List<Double> newVec = new ArrayList<>();
for (int j=0; j < this.len();j++){
if (j < i){
newVec.add(this.get(j));
}
}
return new Transposed(newVec);
}
public Transposed slice(int from, int to) {
Transposed newVec = this;
newVec = newVec.sliceFrom(from);
newVec = newVec.sliceTo(to-from);
return newVec;
}
public Transposed removed(int i) {
List<Double> newVec = this.getValues();
newVec.remove(i);
return new Transposed(newVec);
}
@Override
public String toString() {
String tr = "Transposed[";
for (double val: this.getValues()){
......
......@@ -88,4 +88,53 @@ class VectorTest {
Vector v2 = Vector.of(-1.0, -2.0, -3.0);
assertEquals(v1.concat(v2), Vector.of(1.0, 2.0, 3.0, -1.0, -2.0, -3.0));
}
// Test Transposed :
@Test
void transposedMainOp() {
Transposed v1 = Transposed.of(1.0, 2.0, 3.0);
Transposed v2 = Transposed.of(-1.0, -2.0, -3.0);
assertEquals(v1.add(v2), Transposed.of(0.0, 0.0, 0.0));
assertEquals(v1.sub(v2), Transposed.of(2.0, 4.0, 6.0));
assertEquals(v1.mul(3.0), Transposed.of(3.0, 6.0, 9.0));
assertEquals(Transposed.empty().len(), 0);
assertEquals(Transposed.of(1.0, 2.0, 1.0).len(), 3);
}
@Test
void transposedNormAndSum() {
assertEquals(Transposed.of(1.0, 2.0, 2.0).norm(), 3.0);
assertEquals(Transposed.sum(List.of(Transposed.of(1.0, 2.0, 1.0), Transposed.of(0.0, 0.0, 1.0))).norm(), 3.0);
assertEquals(
Transposed.sum(List.of(Transposed.of(1.0, 2.0, 1.0), Transposed.of(0.0, 0.0, 1.0))).norm(),
Transposed.norms(List.of(Transposed.of(1.0, 2.0, 1.0), Transposed.of(0.0, 0.0, 1.0)))
);
assertEquals(Transposed.sum(List.of(Transposed.of(1.0, 2.0, 1.0), Transposed.of(0.0, 0.0, 1.0))), Transposed.of(1.0, 2.0, 2.0));
}
@Test
void transposedCreation() {
assertEquals(Transposed.zeros(3), Transposed.of(0.0, 0.0, 0.0));
assertEquals(Transposed.ones(3), Transposed.of(1.0, 1.0, 1.0));
assertEquals(Transposed.of(1.0, 2.0).map( d -> d * 2.0), Transposed.of(2.0, 4.0));
assertEquals(Transposed.fill(3, 1.7), Transposed.of(1.7, 1.7, 1.7));
assertEquals(Transposed.tabulate(4, i -> i*5.0), Transposed.of(0.0, 5.0, 10.0, 15.0));
}
@Test
void transposedConcat() {
Transposed v1 = Transposed.of(1.0, 2.0, 3.0);
Transposed v2 = Transposed.of(-1.0, -2.0, -3.0);
assertEquals(v1.concat(v2), Transposed.of(1.0, 2.0, 3.0, -1.0, -2.0, -3.0));
}
@Test
void transposedSlice() {
Transposed v = Transposed.of(1.0, 2.0, 3.0, 4.0, 5.0);
assertEquals(v.sliceFrom(2), Transposed.of(3.0, 4.0, 5.0));
assertEquals(v.sliceTo(3), Transposed.of(1.0, 2.0, 3.0));
assertEquals(v.slice(2,4), Transposed.of(3.0, 4.0));
assertEquals(v.slice(4,4), Transposed.empty());
assertEquals(v.slice(4,2), Transposed.empty());
assertEquals(v.removed(2), Transposed.of(1.0, 2.0, 4.0, 5.0));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment