You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2011/05/12 17:49:40 UTC
svn commit: r1102356 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math/linear/ArrayRealVector.java
test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
Author: erans
Date: Thu May 12 15:49:40 2011
New Revision: 1102356
URL: http://svn.apache.org/viewvc?rev=1102356&view=rev
Log:
MATH-574
Allow outer product for vectors of different sizes.
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ArrayRealVector.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ArrayRealVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ArrayRealVector.java?rev=1102356&r1=1102355&r2=1102356&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ArrayRealVector.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/ArrayRealVector.java Thu May 12 15:49:40 2011
@@ -763,11 +763,11 @@ public class ArrayRealVector extends Abs
if (v instanceof ArrayRealVector) {
return outerProduct((ArrayRealVector) v);
} else {
- checkVectorDimensions(v);
final int m = data.length;
- final RealMatrix out = MatrixUtils.createRealMatrix(m, m);
- for (int i = 0; i < data.length; i++) {
- for (int j = 0; j < data.length; j++) {
+ final int n = v.getDimension();
+ final RealMatrix out = MatrixUtils.createRealMatrix(m, n);
+ for (int i = 0; i < m; i++) {
+ for (int j = 0; j < n; j++) {
out.setEntry(i, j, data[i] * v.getEntry(j));
}
}
@@ -789,11 +789,11 @@ public class ArrayRealVector extends Abs
/** {@inheritDoc} */
@Override
public RealMatrix outerProduct(double[] v) {
- checkVectorDimensions(v.length);
final int m = data.length;
- final RealMatrix out = MatrixUtils.createRealMatrix(m, m);
- for (int i = 0; i < data.length; i++) {
- for (int j = 0; j < data.length; j++) {
+ final int n = v.length;
+ final RealMatrix out = MatrixUtils.createRealMatrix(m, n);
+ for (int i = 0; i < m; i++) {
+ for (int j = 0; j < n; j++) {
out.setEntry(i, j, data[i] * v[j]);
}
}
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java?rev=1102356&r1=1102355&r2=1102356&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/ArrayRealVectorTest.java Thu May 12 15:49:40 2011
@@ -1190,6 +1190,22 @@ public class ArrayRealVectorTest {
v.cosine(w);
}
+ @Test
+ public void testOuterProduct() {
+ final ArrayRealVector u = new ArrayRealVector(new double[] {1, 2, -3});
+ final ArrayRealVector v = new ArrayRealVector(new double[] {4, -2});
+
+ final RealMatrix uv = u.outerProduct(v);
+
+ final double tol = Math.ulp(1d);
+ Assert.assertEquals(4, uv.getEntry(0, 0), tol);
+ Assert.assertEquals(-2, uv.getEntry(0, 1), tol);
+ Assert.assertEquals(8, uv.getEntry(1, 0), tol);
+ Assert.assertEquals(-4, uv.getEntry(1, 1), tol);
+ Assert.assertEquals(-12, uv.getEntry(2, 0), tol);
+ Assert.assertEquals(6, uv.getEntry(2, 1), tol);
+ }
+
/** verifies that two vectors are close (sup norm) */
protected void assertClose(String msg, double[] m, double[] n,
double tolerance) {