code: public static void main(String[] args) throws Exception {
  
  		String indexLocation = args[0];
  		int numTrainVectors = Integer.parseInt(args[1]);
  		int vectorLength = Integer.parseInt(args[2]);
  		int numPrincipalComponents = Integer.parseInt(args[3]);
  		boolean whitening = true;
  		boolean compact = false;
  
  		PCA pca = new PCA(numPrincipalComponents, numTrainVectors, vectorLength, whitening);
  		pca.setCompact(compact);
  
  		// load the vectors into the PCA class
  		Linear vladArray = new Linear(vectorLength, numTrainVectors, true, indexLocation, false, true, 0);
  		for (int i = 0; i < numTrainVectors; i++) {
  			pca.addSample(vladArray.getVector(i));
  		}
  
  		// now we are able to perform SVD and compute the eigenvectors
  		System.out.println("PCA computation started!");
  		long start = System.currentTimeMillis();
  		pca.computeBasis();
  		long end = System.currentTimeMillis();
  		System.out.println("PCA computation completed in " + (end - start) + " ms");
  
  		// now we can save the PCA matrix in a file
  		String PCAfile = indexLocation + "pca_" + numTrainVectors + "_" + numPrincipalComponents + "_"
  				+ (end - start) + "ms.txt";
  		pca.savePCAToFile(PCAfile);
  	}
docs: This method can be used to learn a PCA projection matrix.
  
  @param args
  [0] full path to the location of the BDB store which contains the training vectors (use
  backslashes)
  @param args
  [1] number of vectors to use for learning (the first vectors will be used), e.g. 10000
  @param args
  [2] length of the supplied vectors, e.g. 4096 (for VLAD+SURF vectors generated using 64
  centroids)
  @param args
  [3] number of first principal components to be kept, e.g. 1024
  @throws Exception