Vconnect.java

/*
 * $Id: Vconnect.java,v 1.10 2008/03/26 14:31:23 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.matrix;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.IntMatrix;


/**
 * 分割されたベクトルから元の長いベクトルを復元するクラスです。
 * 
 * <p>Connect some vectors to a vector
 * 
 * @author koga
 * @version $Revision: 1.10 $
 * @see org.mklab.tool.matrix.Vchop
 */
public class Vconnect {

  /**
   * いくつのベクトルを接続して長いベクトルを作り、 ベクトルの長さを集めたリストと合わせて返します。
   * 
   * <p> Connect some vectors to a big vector and make a list of index corresponding to those vectors.
   * 
   * @param vectors ベクトルのリスト
   * @return 復元した長いベクトル (connected vector)
   */
  public static List<Object> vconnect(List<DoubleMatrix> vectors) {
    int n = vectors.size();
    List<IntMatrix> vectorsIndex = new ArrayList<>(n);

    int j = 1;

    DoubleMatrix x1 = vectors.get(1);
    DoubleMatrix X = x1.createZero(0, 0);
    for (int i = 1; i <= n; i++) {
      DoubleMatrix xi = vectors.get(i + 1);
      int row = xi.length();
      vectorsIndex.set(i, IntMatrix.series(j, j + row - 1));
      X = X.appendDown(xi.reshape(row, 1));
      j = j + row;
    }

    return new ArrayList<>(Arrays.asList(new Object[] {X, vectorsIndex}));
  }

}