# Vectors have different size error (Migrated from community.research.microsoft.com)

• ### Question

• johno posted on 02-17-2009 6:15 PM

Dear Infer.NET users,

Thanks in advance...

This error message occured either due to my zero experience in C# or Infer.NET:

System.ArgumentException: Vectors have different size

Parameter name: that

at MicrosoftResearch.Infer.Maths.Vector.CheckCompatible(Vector that, String paramName) in C:\infernetBuilds\05-12-2008_17-31\Runtime\Core\Math\Vector.cs:line 926

after calling Variable.InnerProduct. However I think the vectors (vbeta and vx) are both of length 2.

I'm trying to build a simple linear regression model (code below).

Any assistance would be greatly appreciated.

Thanks, John

public     void Run() {

// Get the arrays of ages and prices from mitsub.txt

double[ ages; double[ prices; int n;

LoadData(@"data/mitsub.txt", out ages, out prices, out n);

double A_tau = 0.01;

double B_tau = 0.01; double sigma2_beta = 1.0E+8;

Vector vmu_vbeta = new Vector(new double[ { 0.0, 0.0 });

PositiveDefiniteMatrix mSigma_vbeta =

PositiveDefiniteMatrix.IdentityScaledBy(2,1/sigma2_beta);

// Create priors for tau, vbeta

Variable<double> tau = Variable.GammaFromShapeAndScale(A_tau,1/B_tau).Named("tau");

Variable<Vector> vbeta = Variable.VectorGaussianFromMeanAndPrecision(vmu_vbeta, mSigma_vbeta).Named("vbeta");

Range agesRange = new Range(n).Named("n");

Vector[ xdata = new Vector;

for (int i = 0; i < n; i++) xdata = new Vector(1, ages);

VariableArray<Vector> vx = Variable.Observed(xdata,agesRange).Named("vx");

VariableArray<double> vmu = Variable.Array<double>(agesRange);

using(Variable.ForEach(agesRange))  {

vmu[agesRange] = Variable.InnerProduct(vbeta,vx[agesRange]);

}

VariableArray<double> vy = Variable.Array<double>(agesRange);

vy[agesRange] = Variable.GaussianFromMeanAndPrecision(vmu[agesRange],tau).Named("vy");

vy.ObservedValue = prices;

// Create an inference engine for VMP

InferenceEngine engine = new InferenceEngine(new VariationalMessagePassing());

Console.WriteLine("Dist over tau=\n" + engine.Infer<Gamma>(tau));

Console.WriteLine("Dist over vbeta=\n" + engine.Infer<VectorGaussian>(vbeta));

}

Friday, June 3, 2011 4:44 PM

### Answers

• minka replied on 02-18-2009 11:08 AM

Hi John, You are calling a different constructor for Vector than you thought. Try changing to "new Vector(1.0, ages)".

Friday, June 3, 2011 4:44 PM